@lotte-innovate/ui-component-test 0.2.2 → 0.2.4

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 (494) hide show
  1. package/_virtual/icons.mjs +2 -0
  2. package/_virtual/icons.mjs.map +1 -0
  3. package/_virtual/index.mjs +2 -0
  4. package/_virtual/index.mjs.map +1 -0
  5. package/_virtual/index10.mjs +2 -0
  6. package/_virtual/index10.mjs.map +1 -0
  7. package/_virtual/index11.mjs +2 -0
  8. package/_virtual/index11.mjs.map +1 -0
  9. package/_virtual/index12.mjs +2 -0
  10. package/_virtual/index12.mjs.map +1 -0
  11. package/_virtual/index13.mjs +2 -0
  12. package/_virtual/index13.mjs.map +1 -0
  13. package/_virtual/index14.mjs +2 -0
  14. package/_virtual/index14.mjs.map +1 -0
  15. package/_virtual/index15.mjs +2 -0
  16. package/_virtual/index15.mjs.map +1 -0
  17. package/_virtual/index16.mjs +2 -0
  18. package/_virtual/index16.mjs.map +1 -0
  19. package/_virtual/index17.mjs +2 -0
  20. package/_virtual/index17.mjs.map +1 -0
  21. package/_virtual/index18.mjs +2 -0
  22. package/_virtual/index18.mjs.map +1 -0
  23. package/_virtual/index19.mjs +2 -0
  24. package/_virtual/index19.mjs.map +1 -0
  25. package/_virtual/index2.mjs +2 -0
  26. package/_virtual/index2.mjs.map +1 -0
  27. package/_virtual/index20.mjs +2 -0
  28. package/_virtual/index20.mjs.map +1 -0
  29. package/_virtual/index21.mjs +2 -0
  30. package/_virtual/index21.mjs.map +1 -0
  31. package/_virtual/index22.mjs +2 -0
  32. package/_virtual/index22.mjs.map +1 -0
  33. package/_virtual/index3.mjs +2 -0
  34. package/_virtual/index3.mjs.map +1 -0
  35. package/_virtual/index4.mjs +2 -0
  36. package/_virtual/index4.mjs.map +1 -0
  37. package/_virtual/index5.mjs +2 -0
  38. package/_virtual/index5.mjs.map +1 -0
  39. package/_virtual/index6.mjs +2 -0
  40. package/_virtual/index6.mjs.map +1 -0
  41. package/_virtual/index7.mjs +2 -0
  42. package/_virtual/index7.mjs.map +1 -0
  43. package/_virtual/index8.mjs +2 -0
  44. package/_virtual/index8.mjs.map +1 -0
  45. package/_virtual/index9.mjs +2 -0
  46. package/_virtual/index9.mjs.map +1 -0
  47. package/_virtual/jsx-runtime.mjs +2 -0
  48. package/_virtual/jsx-runtime.mjs.map +1 -0
  49. package/_virtual/jsx-runtime2.mjs +2 -0
  50. package/_virtual/jsx-runtime2.mjs.map +1 -0
  51. package/_virtual/model.mjs +2 -0
  52. package/_virtual/model.mjs.map +1 -0
  53. package/_virtual/plugin.mjs +2 -0
  54. package/_virtual/plugin.mjs.map +1 -0
  55. package/_virtual/plugin2.mjs +2 -0
  56. package/_virtual/plugin2.mjs.map +1 -0
  57. package/_virtual/plugin3.mjs +2 -0
  58. package/_virtual/plugin3.mjs.map +1 -0
  59. package/_virtual/plugin4.mjs +2 -0
  60. package/_virtual/plugin4.mjs.map +1 -0
  61. package/_virtual/plugin5.mjs +2 -0
  62. package/_virtual/plugin5.mjs.map +1 -0
  63. package/_virtual/plugin6.mjs +2 -0
  64. package/_virtual/plugin6.mjs.map +1 -0
  65. package/_virtual/plugin7.mjs +2 -0
  66. package/_virtual/plugin7.mjs.map +1 -0
  67. package/_virtual/react-jsx-runtime.development.mjs +2 -0
  68. package/_virtual/react-jsx-runtime.development.mjs.map +1 -0
  69. package/_virtual/react-jsx-runtime.production.min.mjs +2 -0
  70. package/_virtual/react-jsx-runtime.production.min.mjs.map +1 -0
  71. package/_virtual/react.development.mjs +2 -0
  72. package/_virtual/react.development.mjs.map +1 -0
  73. package/_virtual/react.production.min.mjs +2 -0
  74. package/_virtual/react.production.min.mjs.map +1 -0
  75. package/_virtual/theme.mjs +2 -0
  76. package/_virtual/theme.mjs.map +1 -0
  77. package/_virtual/tinymce.mjs +2 -0
  78. package/_virtual/tinymce.mjs.map +1 -0
  79. package/_virtual/tinymce2.mjs +2 -0
  80. package/_virtual/tinymce2.mjs.map +1 -0
  81. package/dist/lib/color/constants.d.ts +9 -14
  82. package/dist/lib/color/constants.js +79 -14
  83. package/dist/lib/color/dark.js +1 -1
  84. package/dist/lib/color/light.js +3 -3
  85. package/dist/lib/components/Editor/index.d.ts +25 -0
  86. package/dist/lib/components/Editor/index.js +95 -0
  87. package/dist/lib/components/Editor/index.mjs +3 -0
  88. package/dist/lib/components/Editor/index.mjs.map +1 -0
  89. package/dist/lib/components/index.d.ts +1 -46
  90. package/dist/lib/components/index.js +1 -48
  91. package/dist/lib/constants.d.ts +475 -6
  92. package/dist/lib/constants.js +368 -35
  93. package/dist/lib/constants.mjs +2 -0
  94. package/dist/lib/constants.mjs.map +1 -0
  95. package/dist/lib/index.d.ts +1 -1
  96. package/dist/lib/index.js +1 -1
  97. package/dist/lib/index.mjs +2 -0
  98. package/dist/lib/index.mjs.map +1 -0
  99. package/dist/lib/theme/ThemeProvider.d.ts +16 -0
  100. package/dist/lib/theme/ThemeProvider.js +29 -0
  101. package/dist/lib/theme/ThemeProvider.mjs +3 -0
  102. package/dist/lib/theme/ThemeProvider.mjs.map +1 -0
  103. package/dist/lib/theme/index.d.ts +2 -0
  104. package/dist/lib/theme/index.js +2 -0
  105. package/dist/lib/types.d.ts +79 -0
  106. package/dist/lib/utils/utils.d.ts +0 -1
  107. package/dist/lib/utils/utils.js +0 -17
  108. package/dist/lib/utils/utils.mjs +2 -0
  109. package/dist/lib/utils/utils.mjs.map +1 -0
  110. package/dist/tsconfig.tsbuildinfo +1 -0
  111. package/package.json +105 -134
  112. package/public/tinymce/CHANGELOG.md +3453 -0
  113. package/public/tinymce/README.md +73 -0
  114. package/public/tinymce/bower.json +27 -0
  115. package/public/tinymce/composer.json +52 -0
  116. package/public/tinymce/icons/default/icons.js +194 -0
  117. package/public/tinymce/icons/default/icons.min.js +1 -0
  118. package/public/tinymce/icons/default/icons.mjs +2 -0
  119. package/public/tinymce/icons/default/icons.mjs.map +1 -0
  120. package/public/tinymce/icons/default/index.d.ts +1 -0
  121. package/public/tinymce/icons/default/index.js +7 -0
  122. package/public/tinymce/icons/default/index.mjs +2 -0
  123. package/public/tinymce/icons/default/index.mjs.map +1 -0
  124. package/public/tinymce/license.txt +21 -0
  125. package/public/tinymce/models/dom/index.d.ts +1 -0
  126. package/public/tinymce/models/dom/index.js +7 -0
  127. package/public/tinymce/models/dom/index.mjs +2 -0
  128. package/public/tinymce/models/dom/index.mjs.map +1 -0
  129. package/public/tinymce/models/dom/model.js +8040 -0
  130. package/public/tinymce/models/dom/model.min.js +4 -0
  131. package/public/tinymce/models/dom/model.mjs +2 -0
  132. package/public/tinymce/models/dom/model.mjs.map +1 -0
  133. package/public/tinymce/package.json +32 -0
  134. package/public/tinymce/plugins/advlist/index.d.ts +1 -0
  135. package/public/tinymce/plugins/advlist/index.js +7 -0
  136. package/public/tinymce/plugins/advlist/index.mjs +2 -0
  137. package/public/tinymce/plugins/advlist/index.mjs.map +1 -0
  138. package/public/tinymce/plugins/advlist/plugin.js +259 -0
  139. package/public/tinymce/plugins/advlist/plugin.min.js +4 -0
  140. package/public/tinymce/plugins/advlist/plugin.mjs +2 -0
  141. package/public/tinymce/plugins/advlist/plugin.mjs.map +1 -0
  142. package/public/tinymce/plugins/autolink/index.js +7 -0
  143. package/public/tinymce/plugins/autolink/plugin.js +228 -0
  144. package/public/tinymce/plugins/autolink/plugin.min.js +4 -0
  145. package/public/tinymce/plugins/code/index.d.ts +1 -0
  146. package/public/tinymce/plugins/code/index.js +7 -0
  147. package/public/tinymce/plugins/code/index.mjs +2 -0
  148. package/public/tinymce/plugins/code/index.mjs.map +1 -0
  149. package/public/tinymce/plugins/code/plugin.js +85 -0
  150. package/public/tinymce/plugins/code/plugin.min.js +4 -0
  151. package/public/tinymce/plugins/code/plugin.mjs +2 -0
  152. package/public/tinymce/plugins/code/plugin.mjs.map +1 -0
  153. package/public/tinymce/plugins/codesample/index.d.ts +1 -0
  154. package/public/tinymce/plugins/codesample/index.js +7 -0
  155. package/public/tinymce/plugins/codesample/index.mjs +2 -0
  156. package/public/tinymce/plugins/codesample/index.mjs.map +1 -0
  157. package/public/tinymce/plugins/codesample/plugin.d.ts +45 -0
  158. package/public/tinymce/plugins/codesample/plugin.js +2463 -0
  159. package/public/tinymce/plugins/codesample/plugin.min.js +4 -0
  160. package/public/tinymce/plugins/codesample/plugin.mjs +2 -0
  161. package/public/tinymce/plugins/codesample/plugin.mjs.map +1 -0
  162. package/public/tinymce/plugins/image/index.d.ts +1 -0
  163. package/public/tinymce/plugins/image/index.js +7 -0
  164. package/public/tinymce/plugins/image/index.mjs +2 -0
  165. package/public/tinymce/plugins/image/index.mjs.map +1 -0
  166. package/public/tinymce/plugins/image/plugin.js +1505 -0
  167. package/public/tinymce/plugins/image/plugin.min.js +4 -0
  168. package/public/tinymce/plugins/image/plugin.mjs +2 -0
  169. package/public/tinymce/plugins/image/plugin.mjs.map +1 -0
  170. package/public/tinymce/plugins/link/index.d.ts +1 -0
  171. package/public/tinymce/plugins/link/index.js +7 -0
  172. package/public/tinymce/plugins/link/index.mjs +2 -0
  173. package/public/tinymce/plugins/link/index.mjs.map +1 -0
  174. package/public/tinymce/plugins/link/plugin.js +1242 -0
  175. package/public/tinymce/plugins/link/plugin.min.js +4 -0
  176. package/public/tinymce/plugins/link/plugin.mjs +2 -0
  177. package/public/tinymce/plugins/link/plugin.mjs.map +1 -0
  178. package/public/tinymce/plugins/lists/index.d.ts +1 -0
  179. package/public/tinymce/plugins/lists/index.js +7 -0
  180. package/public/tinymce/plugins/lists/index.mjs +2 -0
  181. package/public/tinymce/plugins/lists/index.mjs.map +1 -0
  182. package/public/tinymce/plugins/lists/plugin.js +2172 -0
  183. package/public/tinymce/plugins/lists/plugin.min.js +4 -0
  184. package/public/tinymce/plugins/lists/plugin.mjs +2 -0
  185. package/public/tinymce/plugins/lists/plugin.mjs.map +1 -0
  186. package/public/tinymce/plugins/table/index.d.ts +1 -0
  187. package/public/tinymce/plugins/table/index.js +7 -0
  188. package/public/tinymce/plugins/table/index.mjs +2 -0
  189. package/public/tinymce/plugins/table/index.mjs.map +1 -0
  190. package/public/tinymce/plugins/table/plugin.js +3462 -0
  191. package/public/tinymce/plugins/table/plugin.min.js +4 -0
  192. package/public/tinymce/plugins/table/plugin.mjs +2 -0
  193. package/public/tinymce/plugins/table/plugin.mjs.map +1 -0
  194. package/public/tinymce/skins/content/default/content.css +61 -0
  195. package/public/tinymce/skins/content/default/content.js +2 -0
  196. package/public/tinymce/skins/content/default/content.min.css +1 -0
  197. package/public/tinymce/skins/content/default/content.mjs +2 -0
  198. package/public/tinymce/skins/content/default/content.mjs.map +1 -0
  199. package/public/tinymce/skins/ui/oxide/content.css +785 -0
  200. package/public/tinymce/skins/ui/oxide/content.inline.css +779 -0
  201. package/public/tinymce/skins/ui/oxide/content.inline.js +2 -0
  202. package/public/tinymce/skins/ui/oxide/content.inline.min.css +1 -0
  203. package/public/tinymce/skins/ui/oxide/content.js +2 -0
  204. package/public/tinymce/skins/ui/oxide/content.min.css +1 -0
  205. package/public/tinymce/skins/ui/oxide/content.mjs +2 -0
  206. package/public/tinymce/skins/ui/oxide/content.mjs.map +1 -0
  207. package/public/tinymce/skins/ui/oxide/skin.css +3763 -0
  208. package/public/tinymce/skins/ui/oxide/skin.js +2 -0
  209. package/public/tinymce/skins/ui/oxide/skin.min.css +1 -0
  210. package/public/tinymce/skins/ui/oxide/skin.mjs +2 -0
  211. package/public/tinymce/skins/ui/oxide/skin.mjs.map +1 -0
  212. package/public/tinymce/skins/ui/oxide/skin.shadowdom.css +30 -0
  213. package/public/tinymce/skins/ui/oxide/skin.shadowdom.js +2 -0
  214. package/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css +1 -0
  215. package/public/tinymce/skins/ui/oxide-dark/content.css +766 -0
  216. package/public/tinymce/skins/ui/oxide-dark/content.inline.css +779 -0
  217. package/public/tinymce/skins/ui/oxide-dark/content.inline.js +2 -0
  218. package/public/tinymce/skins/ui/oxide-dark/content.inline.min.css +1 -0
  219. package/public/tinymce/skins/ui/oxide-dark/content.js +2 -0
  220. package/public/tinymce/skins/ui/oxide-dark/content.min.css +1 -0
  221. package/public/tinymce/skins/ui/oxide-dark/skin.css +3766 -0
  222. package/public/tinymce/skins/ui/oxide-dark/skin.js +2 -0
  223. package/public/tinymce/skins/ui/oxide-dark/skin.min.css +1 -0
  224. package/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +30 -0
  225. package/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js +2 -0
  226. package/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +1 -0
  227. package/public/tinymce/themes/silver/index.d.ts +1 -0
  228. package/public/tinymce/themes/silver/index.js +7 -0
  229. package/public/tinymce/themes/silver/index.mjs +2 -0
  230. package/public/tinymce/themes/silver/index.mjs.map +1 -0
  231. package/public/tinymce/themes/silver/theme.js +30775 -0
  232. package/public/tinymce/themes/silver/theme.min.js +384 -0
  233. package/public/tinymce/themes/silver/theme.mjs +2 -0
  234. package/public/tinymce/themes/silver/theme.mjs.map +1 -0
  235. package/public/tinymce/tinymce.d.ts +3238 -0
  236. package/public/tinymce/tinymce.js +31779 -0
  237. package/public/tinymce/tinymce.min.js +384 -0
  238. package/public/tinymce/tinymce.mjs +2 -0
  239. package/public/tinymce/tinymce.mjs.map +1 -0
  240. package/README.md +0 -163
  241. package/dist/globals.css +0 -261089
  242. package/dist/lib/Typography/Header/index.d.ts +0 -13
  243. package/dist/lib/Typography/Header/index.js +0 -55
  244. package/dist/lib/Typography/Text/index.d.ts +0 -15
  245. package/dist/lib/Typography/Text/index.js +0 -44
  246. package/dist/lib/Typography/index.d.ts +0 -2
  247. package/dist/lib/Typography/index.js +0 -2
  248. package/dist/lib/components/Accordion/index.d.ts +0 -16
  249. package/dist/lib/components/Accordion/index.js +0 -58
  250. package/dist/lib/components/AlertDialog/AlertDialogAction.d.ts +0 -14
  251. package/dist/lib/components/AlertDialog/AlertDialogAction.js +0 -59
  252. package/dist/lib/components/AlertDialog/AlertDialogCancel.d.ts +0 -13
  253. package/dist/lib/components/AlertDialog/AlertDialogCancel.js +0 -56
  254. package/dist/lib/components/AlertDialog/AlertDialogContent.d.ts +0 -11
  255. package/dist/lib/components/AlertDialog/AlertDialogContent.js +0 -49
  256. package/dist/lib/components/AlertDialog/AlertDialogDescription.d.ts +0 -10
  257. package/dist/lib/components/AlertDialog/AlertDialogDescription.js +0 -45
  258. package/dist/lib/components/AlertDialog/AlertDialogTitle.d.ts +0 -10
  259. package/dist/lib/components/AlertDialog/AlertDialogTitle.js +0 -45
  260. package/dist/lib/components/AlertDialog/AlertDialogTrigger.d.ts +0 -17
  261. package/dist/lib/components/AlertDialog/AlertDialogTrigger.js +0 -55
  262. package/dist/lib/components/AlertDialog/index.d.ts +0 -20
  263. package/dist/lib/components/AlertDialog/index.js +0 -37
  264. package/dist/lib/components/AspectRatio/index.d.ts +0 -10
  265. package/dist/lib/components/AspectRatio/index.js +0 -42
  266. package/dist/lib/components/Avatar/index.d.ts +0 -17
  267. package/dist/lib/components/Avatar/index.js +0 -57
  268. package/dist/lib/components/Badge/index.d.ts +0 -18
  269. package/dist/lib/components/Badge/index.js +0 -54
  270. package/dist/lib/components/BubbleChart/index.d.ts +0 -31
  271. package/dist/lib/components/BubbleChart/index.js +0 -43
  272. package/dist/lib/components/Button/index.d.ts +0 -16
  273. package/dist/lib/components/Button/index.js +0 -56
  274. package/dist/lib/components/Callout/CalloutIcon.d.ts +0 -12
  275. package/dist/lib/components/Callout/CalloutIcon.js +0 -57
  276. package/dist/lib/components/Callout/CalloutText.d.ts +0 -10
  277. package/dist/lib/components/Callout/CalloutText.js +0 -52
  278. package/dist/lib/components/Callout/index.d.ts +0 -20
  279. package/dist/lib/components/Callout/index.js +0 -75
  280. package/dist/lib/components/Card/index.d.ts +0 -14
  281. package/dist/lib/components/Card/index.js +0 -64
  282. package/dist/lib/components/Checkbox/index.d.ts +0 -17
  283. package/dist/lib/components/Checkbox/index.js +0 -89
  284. package/dist/lib/components/CheckboxCard/index.d.ts +0 -20
  285. package/dist/lib/components/CheckboxCard/index.js +0 -58
  286. package/dist/lib/components/CheckboxGroup/CheckboxGroupItem.d.ts +0 -5
  287. package/dist/lib/components/CheckboxGroup/CheckboxGroupItem.js +0 -33
  288. package/dist/lib/components/CheckboxGroup/index.d.ts +0 -17
  289. package/dist/lib/components/CheckboxGroup/index.js +0 -35
  290. package/dist/lib/components/ContextMenu/ContextMenuCheckboxItem.d.ts +0 -4
  291. package/dist/lib/components/ContextMenu/ContextMenuCheckboxItem.js +0 -40
  292. package/dist/lib/components/ContextMenu/ContextMenuContent.d.ts +0 -11
  293. package/dist/lib/components/ContextMenu/ContextMenuContent.js +0 -56
  294. package/dist/lib/components/ContextMenu/ContextMenuGroup.d.ts +0 -4
  295. package/dist/lib/components/ContextMenu/ContextMenuGroup.js +0 -30
  296. package/dist/lib/components/ContextMenu/ContextMenuItem.d.ts +0 -13
  297. package/dist/lib/components/ContextMenu/ContextMenuItem.js +0 -59
  298. package/dist/lib/components/ContextMenu/ContextMenuItemIndicator.d.ts +0 -10
  299. package/dist/lib/components/ContextMenu/ContextMenuItemIndicator.js +0 -50
  300. package/dist/lib/components/ContextMenu/ContextMenuLabel.d.ts +0 -11
  301. package/dist/lib/components/ContextMenu/ContextMenuLabel.js +0 -48
  302. package/dist/lib/components/ContextMenu/ContextMenuRadioGroup.d.ts +0 -8
  303. package/dist/lib/components/ContextMenu/ContextMenuRadioGroup.js +0 -31
  304. package/dist/lib/components/ContextMenu/ContextMenuRadioItem.d.ts +0 -4
  305. package/dist/lib/components/ContextMenu/ContextMenuRadioItem.js +0 -41
  306. package/dist/lib/components/ContextMenu/ContextMenuSeparator.d.ts +0 -3
  307. package/dist/lib/components/ContextMenu/ContextMenuSeparator.js +0 -31
  308. package/dist/lib/components/ContextMenu/ContextMenuSubContent.d.ts +0 -11
  309. package/dist/lib/components/ContextMenu/ContextMenuSubContent.js +0 -53
  310. package/dist/lib/components/ContextMenu/ContextMenuSubTrigger.d.ts +0 -4
  311. package/dist/lib/components/ContextMenu/ContextMenuSubTrigger.js +0 -40
  312. package/dist/lib/components/ContextMenu/ContextMenuTrigger.d.ts +0 -4
  313. package/dist/lib/components/ContextMenu/ContextMenuTrigger.js +0 -31
  314. package/dist/lib/components/ContextMenu/index.d.ts +0 -25
  315. package/dist/lib/components/ContextMenu/index.js +0 -54
  316. package/dist/lib/components/DataList/DataListItem.d.ts +0 -9
  317. package/dist/lib/components/DataList/DataListItem.js +0 -43
  318. package/dist/lib/components/DataList/DataListLabel.d.ts +0 -10
  319. package/dist/lib/components/DataList/DataListLabel.js +0 -49
  320. package/dist/lib/components/DataList/DataListValue.d.ts +0 -11
  321. package/dist/lib/components/DataList/DataListValue.js +0 -51
  322. package/dist/lib/components/DataList/index.d.ts +0 -17
  323. package/dist/lib/components/DataList/index.js +0 -57
  324. package/dist/lib/components/Dialog/DialogAction.d.ts +0 -15
  325. package/dist/lib/components/Dialog/DialogAction.js +0 -57
  326. package/dist/lib/components/Dialog/DialogCancel.d.ts +0 -11
  327. package/dist/lib/components/Dialog/DialogCancel.js +0 -53
  328. package/dist/lib/components/Dialog/DialogContent.d.ts +0 -11
  329. package/dist/lib/components/Dialog/DialogContent.js +0 -55
  330. package/dist/lib/components/Dialog/DialogDescription.d.ts +0 -9
  331. package/dist/lib/components/Dialog/DialogDescription.js +0 -45
  332. package/dist/lib/components/Dialog/DialogSlot.d.ts +0 -9
  333. package/dist/lib/components/Dialog/DialogSlot.js +0 -44
  334. package/dist/lib/components/Dialog/DialogTitle.d.ts +0 -11
  335. package/dist/lib/components/Dialog/DialogTitle.js +0 -45
  336. package/dist/lib/components/Dialog/DialogTrigger.d.ts +0 -3
  337. package/dist/lib/components/Dialog/DialogTrigger.js +0 -30
  338. package/dist/lib/components/Dialog/index.d.ts +0 -18
  339. package/dist/lib/components/Dialog/index.js +0 -38
  340. package/dist/lib/components/DoughnutChart/index.d.ts +0 -23
  341. package/dist/lib/components/DoughnutChart/index.js +0 -46
  342. package/dist/lib/components/DropdownMenu/DropdonMenuRadioGroup.d.ts +0 -8
  343. package/dist/lib/components/DropdownMenu/DropdonMenuRadioGroup.js +0 -31
  344. package/dist/lib/components/DropdownMenu/DropdonMenuSubContent.d.ts +0 -11
  345. package/dist/lib/components/DropdownMenu/DropdonMenuSubContent.js +0 -58
  346. package/dist/lib/components/DropdownMenu/DropdownMenuCheckboxItem.d.ts +0 -7
  347. package/dist/lib/components/DropdownMenu/DropdownMenuCheckboxItem.js +0 -38
  348. package/dist/lib/components/DropdownMenu/DropdownMenuContent.d.ts +0 -11
  349. package/dist/lib/components/DropdownMenu/DropdownMenuContent.js +0 -54
  350. package/dist/lib/components/DropdownMenu/DropdownMenuItem.d.ts +0 -13
  351. package/dist/lib/components/DropdownMenu/DropdownMenuItem.js +0 -56
  352. package/dist/lib/components/DropdownMenu/DropdownMenuItemIndicator.d.ts +0 -10
  353. package/dist/lib/components/DropdownMenu/DropdownMenuItemIndicator.js +0 -46
  354. package/dist/lib/components/DropdownMenu/DropdownMenuLable.d.ts +0 -11
  355. package/dist/lib/components/DropdownMenu/DropdownMenuLable.js +0 -46
  356. package/dist/lib/components/DropdownMenu/DropdownMenuRadioItem.d.ts +0 -4
  357. package/dist/lib/components/DropdownMenu/DropdownMenuRadioItem.js +0 -39
  358. package/dist/lib/components/DropdownMenu/DropdownMenuSeparator.d.ts +0 -3
  359. package/dist/lib/components/DropdownMenu/DropdownMenuSeparator.js +0 -31
  360. package/dist/lib/components/DropdownMenu/DropdownMenuSub.d.ts +0 -3
  361. package/dist/lib/components/DropdownMenu/DropdownMenuSub.js +0 -30
  362. package/dist/lib/components/DropdownMenu/DropdownMenuSubTrigger.d.ts +0 -4
  363. package/dist/lib/components/DropdownMenu/DropdownMenuSubTrigger.js +0 -38
  364. package/dist/lib/components/DropdownMenu/DropdownMenuTrigger.d.ts +0 -13
  365. package/dist/lib/components/DropdownMenu/DropdownMenuTrigger.js +0 -51
  366. package/dist/lib/components/DropdownMenu/index.d.ts +0 -23
  367. package/dist/lib/components/DropdownMenu/index.js +0 -43
  368. package/dist/lib/components/HoverCard/HoverCardContent.d.ts +0 -14
  369. package/dist/lib/components/HoverCard/HoverCardContent.js +0 -59
  370. package/dist/lib/components/HoverCard/HoverCardTrigger.d.ts +0 -3
  371. package/dist/lib/components/HoverCard/HoverCardTrigger.js +0 -30
  372. package/dist/lib/components/HoverCard/index.d.ts +0 -10
  373. package/dist/lib/components/HoverCard/index.js +0 -33
  374. package/dist/lib/components/IconButton/index.d.ts +0 -15
  375. package/dist/lib/components/IconButton/index.js +0 -63
  376. package/dist/lib/components/Inset/index.d.ts +0 -10
  377. package/dist/lib/components/Inset/index.js +0 -50
  378. package/dist/lib/components/Label/index.d.ts +0 -17
  379. package/dist/lib/components/Label/index.js +0 -53
  380. package/dist/lib/components/Menubar/MenubarCheckboxItem.d.ts +0 -4
  381. package/dist/lib/components/Menubar/MenubarCheckboxItem.js +0 -38
  382. package/dist/lib/components/Menubar/MenubarContent.d.ts +0 -11
  383. package/dist/lib/components/Menubar/MenubarContent.js +0 -60
  384. package/dist/lib/components/Menubar/MenubarItem.d.ts +0 -13
  385. package/dist/lib/components/Menubar/MenubarItem.js +0 -54
  386. package/dist/lib/components/Menubar/MenubarItemIndicator.d.ts +0 -10
  387. package/dist/lib/components/Menubar/MenubarItemIndicator.js +0 -49
  388. package/dist/lib/components/Menubar/MenubarMenu.d.ts +0 -2
  389. package/dist/lib/components/Menubar/MenubarMenu.js +0 -30
  390. package/dist/lib/components/Menubar/MenubarRadioGroup.d.ts +0 -8
  391. package/dist/lib/components/Menubar/MenubarRadioGroup.js +0 -31
  392. package/dist/lib/components/Menubar/MenubarRadioItem.d.ts +0 -4
  393. package/dist/lib/components/Menubar/MenubarRadioItem.js +0 -40
  394. package/dist/lib/components/Menubar/MenubarSeparator.d.ts +0 -3
  395. package/dist/lib/components/Menubar/MenubarSeparator.js +0 -31
  396. package/dist/lib/components/Menubar/MenubarSub.d.ts +0 -3
  397. package/dist/lib/components/Menubar/MenubarSub.js +0 -30
  398. package/dist/lib/components/Menubar/MenubarSubContent.d.ts +0 -10
  399. package/dist/lib/components/Menubar/MenubarSubContent.js +0 -51
  400. package/dist/lib/components/Menubar/MenubarSubTrigger.d.ts +0 -4
  401. package/dist/lib/components/Menubar/MenubarSubTrigger.js +0 -41
  402. package/dist/lib/components/Menubar/MenubarTrigger.d.ts +0 -12
  403. package/dist/lib/components/Menubar/MenubarTrigger.js +0 -57
  404. package/dist/lib/components/Menubar/index.d.ts +0 -31
  405. package/dist/lib/components/Menubar/index.js +0 -73
  406. package/dist/lib/components/NavigationMenu/NavigationMenuContent.d.ts +0 -11
  407. package/dist/lib/components/NavigationMenu/NavigationMenuContent.js +0 -48
  408. package/dist/lib/components/NavigationMenu/NavigationMenuIndicator.d.ts +0 -3
  409. package/dist/lib/components/NavigationMenu/NavigationMenuIndicator.js +0 -31
  410. package/dist/lib/components/NavigationMenu/NavigationMenuItem.d.ts +0 -3
  411. package/dist/lib/components/NavigationMenu/NavigationMenuItem.js +0 -30
  412. package/dist/lib/components/NavigationMenu/NavigationMenuLink.d.ts +0 -13
  413. package/dist/lib/components/NavigationMenu/NavigationMenuLink.js +0 -51
  414. package/dist/lib/components/NavigationMenu/NavigationMenuList.d.ts +0 -12
  415. package/dist/lib/components/NavigationMenu/NavigationMenuList.js +0 -47
  416. package/dist/lib/components/NavigationMenu/NavigationMenuTrigger.d.ts +0 -13
  417. package/dist/lib/components/NavigationMenu/NavigationMenuTrigger.js +0 -58
  418. package/dist/lib/components/NavigationMenu/NavigationMenuViewport.d.ts +0 -12
  419. package/dist/lib/components/NavigationMenu/NavigationMenuViewport.js +0 -53
  420. package/dist/lib/components/NavigationMenu/index.d.ts +0 -21
  421. package/dist/lib/components/NavigationMenu/index.js +0 -50
  422. package/dist/lib/components/PieChart/index.d.ts +0 -23
  423. package/dist/lib/components/PieChart/index.js +0 -46
  424. package/dist/lib/components/Popover/PopoverClose.d.ts +0 -9
  425. package/dist/lib/components/Popover/PopoverClose.js +0 -46
  426. package/dist/lib/components/Popover/PopoverContent.d.ts +0 -11
  427. package/dist/lib/components/Popover/PopoverContent.js +0 -63
  428. package/dist/lib/components/Popover/PopoverTrigger.d.ts +0 -3
  429. package/dist/lib/components/Popover/PopoverTrigger.js +0 -30
  430. package/dist/lib/components/Popover/index.d.ts +0 -12
  431. package/dist/lib/components/Popover/index.js +0 -34
  432. package/dist/lib/components/Progress/index.d.ts +0 -16
  433. package/dist/lib/components/Progress/index.js +0 -57
  434. package/dist/lib/components/RadarChart/index.d.ts +0 -34
  435. package/dist/lib/components/RadarChart/index.js +0 -43
  436. package/dist/lib/components/Radio/index.d.ts +0 -14
  437. package/dist/lib/components/Radio/index.js +0 -51
  438. package/dist/lib/components/RadioCards/RadioCardsItem.d.ts +0 -10
  439. package/dist/lib/components/RadioCards/RadioCardsItem.js +0 -52
  440. package/dist/lib/components/RadioCards/index.d.ts +0 -14
  441. package/dist/lib/components/RadioCards/index.js +0 -43
  442. package/dist/lib/components/RadioGroup/RadioGroupItem.d.ts +0 -13
  443. package/dist/lib/components/RadioGroup/RadioGroupItem.js +0 -44
  444. package/dist/lib/components/RadioGroup/index.d.ts +0 -16
  445. package/dist/lib/components/RadioGroup/index.js +0 -51
  446. package/dist/lib/components/ScrollArea/index.d.ts +0 -9
  447. package/dist/lib/components/ScrollArea/index.js +0 -36
  448. package/dist/lib/components/SegmentedControl/SegmentedControlItem.d.ts +0 -6
  449. package/dist/lib/components/SegmentedControl/SegmentedControlItem.js +0 -35
  450. package/dist/lib/components/SegmentedControl/index.d.ts +0 -15
  451. package/dist/lib/components/SegmentedControl/index.js +0 -48
  452. package/dist/lib/components/Select/index.d.ts +0 -25
  453. package/dist/lib/components/Select/index.js +0 -83
  454. package/dist/lib/components/Separator/index.d.ts +0 -11
  455. package/dist/lib/components/Separator/index.js +0 -47
  456. package/dist/lib/components/Skeleton/index.d.ts +0 -15
  457. package/dist/lib/components/Skeleton/index.js +0 -43
  458. package/dist/lib/components/Slider/index.d.ts +0 -15
  459. package/dist/lib/components/Slider/index.js +0 -50
  460. package/dist/lib/components/Spinner/index.d.ts +0 -15
  461. package/dist/lib/components/Spinner/index.js +0 -47
  462. package/dist/lib/components/TabNav/index.d.ts +0 -11
  463. package/dist/lib/components/TabNav/index.js +0 -46
  464. package/dist/lib/components/Table/index.d.ts +0 -21
  465. package/dist/lib/components/Table/index.js +0 -89
  466. package/dist/lib/components/Tabs/index.d.ts +0 -16
  467. package/dist/lib/components/Tabs/index.js +0 -59
  468. package/dist/lib/components/TextArea/index.d.ts +0 -16
  469. package/dist/lib/components/TextArea/index.js +0 -58
  470. package/dist/lib/components/TextField/index.d.ts +0 -18
  471. package/dist/lib/components/TextField/index.js +0 -53
  472. package/dist/lib/components/Toast/ToastActionButton.d.ts +0 -14
  473. package/dist/lib/components/Toast/ToastActionButton.js +0 -67
  474. package/dist/lib/components/Toast/ToastDescription.d.ts +0 -13
  475. package/dist/lib/components/Toast/ToastDescription.js +0 -53
  476. package/dist/lib/components/Toast/ToastTitle.d.ts +0 -13
  477. package/dist/lib/components/Toast/ToastTitle.js +0 -53
  478. package/dist/lib/components/Toast/index.d.ts +0 -30
  479. package/dist/lib/components/Toast/index.js +0 -94
  480. package/dist/lib/components/Toggle/ToggleWithText.d.ts +0 -21
  481. package/dist/lib/components/Toggle/ToggleWithText.js +0 -57
  482. package/dist/lib/components/Toggle/index.d.ts +0 -21
  483. package/dist/lib/components/Toggle/index.js +0 -58
  484. package/dist/lib/components/ToggleGroup/index.d.ts +0 -20
  485. package/dist/lib/components/ToggleGroup/index.js +0 -43
  486. package/dist/lib/components/ToggleGroup/toggleGroupItem.d.ts +0 -17
  487. package/dist/lib/components/ToggleGroup/toggleGroupItem.js +0 -52
  488. package/dist/lib/components/ToggleSwitch/index.d.ts +0 -13
  489. package/dist/lib/components/ToggleSwitch/index.js +0 -71
  490. package/dist/lib/components/Tooltip/index.d.ts +0 -20
  491. package/dist/lib/components/Tooltip/index.js +0 -49
  492. package/dist/styles.css +0 -32751
  493. package/dist/tailwind.config.d.ts +0 -3
  494. package/dist/tailwind.config.js +0 -144
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.mjs","sources":["../../../../../../public/tinymce/models/dom/model.js"],"sourcesContent":["/**\n * TinyMCE version 6.8.5 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$2 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$2(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$2(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply = f => {\n return f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$1 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map$1 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$2 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$2(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$2 = (xs, f) => flatten(map$1(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort$1 = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$d(xs, 0);\n const last$2 = xs => get$d(xs, xs.length - 1);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$1(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$1(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$c = (obj, key) => {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const isEmpty = r => {\n for (const x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const setOptions = (element, attrs) => {\n each$1(attrs, (v, k) => {\n v.fold(() => {\n remove$7(element, k);\n }, value => {\n rawSet(element.dom, k, value);\n });\n });\n };\n const get$b = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$b(element, key));\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n const is$2 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq$1 = (e1, e2) => e1.dom === e2.dom;\n const contains$1 = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$5 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$1(parent, element);\n }, v => {\n before$3(v, element);\n });\n };\n const wrap = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$4 = (marker, elements) => {\n each$2(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n const append = (parent, elements) => {\n each$2(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$2(children$2(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$2(wrapper);\n if (children.length > 0) {\n after$4(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const copy$2 = (original, tag) => {\n const nu = shallowAs(original, tag);\n const cloneChildren = children$2(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n const mutate$1 = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$5(original, nu);\n const children = children$2(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains$2(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const address = (row, column) => ({\n row,\n column\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const detailnew = (element, rowspan, colspan, isNew) => ({\n element,\n rowspan,\n colspan,\n isNew\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const rowdetailnew = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const elementnew = (element, isNew, isLocked) => ({\n element,\n isNew,\n isLocked\n });\n const rowcells = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const isSupported$1 = constant(supported);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isSupported$1() && isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body$1 = () => getBody$1(SugarElement.fromDom(document));\n const getBody$1 = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$2(children$2(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$2 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$1(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$1(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$a = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$2 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n const copy$1 = (source, target) => {\n const sourceDom = source.dom;\n const targetDom = target.dom;\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n const hasColspan = cellOrCol => {\n if (isTag('col')(cellOrCol)) {\n return getAttrValue(cellOrCol, 'span', 1) > 1;\n } else {\n return getSpan(cellOrCol, 'colspan') > 1;\n }\n };\n const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n const minWidth = constant(10);\n const minHeight = constant(10);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$2(children$2(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n const columns$1 = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map$1(columns$1(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells = map$1(cells$1(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows = rows$1(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform();\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$a(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$a(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const api$2 = Dimension('width', element => element.dom.offsetWidth);\n const get$9 = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const getInner = getInnerWidth;\n const getRuntime$1 = getWidth;\n\n const addCells = (gridRow, index, cells) => {\n const existingCells = gridRow.cells;\n const before = existingCells.slice(0, index);\n const after = existingCells.slice(index);\n const newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n const mutateCell = (gridRow, index, cell) => {\n const cells = gridRow.cells;\n cells[index] = cell;\n };\n const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n const mapCells = (gridRow, f) => {\n const cells = gridRow.cells;\n const r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n const getCell = (gridRow, index) => gridRow.cells[index];\n const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n const cellLength = gridRow => gridRow.cells.length;\n const extractGridDetails = grid => {\n const result = partition(grid, row => row.section === 'colgroup');\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n const clone = (gridRow, cloneRow, cloneCell) => {\n const newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n const getLockedColumnsFromGrid = grid => {\n const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n each$2(row.cells, (cell, idx) => {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n return sort$1(lockedArr);\n };\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind$2(warehouse.all, r => {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each$2(rowData.cells, column => {\n const colspan = column.colspan;\n range$1(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$1 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each$2(rows, rowData => {\n const currentRow = [];\n each$2(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$1(list);\n };\n const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$1,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n const columns = (warehouse, isValidCell = always) => {\n const grid = warehouse.grid;\n const cols = range$1(grid.columns, identity);\n const rowsArr = range$1(grid.rows, identity);\n return map$1(cols, col => {\n const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n return decide(getBlock, isValid, getFallback);\n });\n };\n const decide = (getBlock, isValid, getFallback) => {\n const inBlock = getBlock();\n const validInBlock = find$1(inBlock, isValid);\n const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n return detailOption.map(detail => detail.element);\n };\n const rows = warehouse => {\n const grid = warehouse.grid;\n const rowsArr = range$1(grid.rows, identity);\n const cols = range$1(grid.columns, identity);\n return map$1(rowsArr, row => {\n const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n const isSingle = detail => detail.rowspan === 1;\n const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n const deduce = (xs, index) => {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n const current = xs[index].fold(() => {\n const rest = reverse(xs.slice(0, index));\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, c => Optional.some({\n value: c,\n delta: 0\n }));\n const next = xs[index + 1].fold(() => {\n const rest = xs.slice(index + 1);\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, n => Optional.some({\n value: n,\n delta: 1\n }));\n return current.bind(c => next.map(n => {\n const extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n }));\n };\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n const api$1 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$8 = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const getRuntime = getHeight$1;\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const rowInfo = (row, y) => ({\n row,\n y\n });\n const colInfo = (col, x) => ({\n col,\n x\n });\n const rtlEdge = cell => {\n const pos = absolute(cell);\n return pos.left + getOuter$2(cell);\n };\n const ltrEdge = cell => {\n return absolute(cell).left;\n };\n const getLeftEdge = (index, cell) => {\n return colInfo(index, ltrEdge(cell));\n };\n const getRightEdge = (index, cell) => {\n return colInfo(index, rtlEdge(cell));\n };\n const getTop$1 = cell => {\n return absolute(cell).top;\n };\n const getTopEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell));\n };\n const getBottomEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n const findPositions = (getInnerEdge, getOuterEdge, array) => {\n if (array.length === 0) {\n return [];\n }\n const lines = map$1(array.slice(1), (cellOption, index) => {\n return cellOption.map(cell => {\n return getInnerEdge(index, cell);\n });\n });\n const lastLine = array[array.length - 1].map(cell => {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n const negate = step => {\n return -step;\n };\n const height = {\n delta: identity,\n positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n edge: getTop$1\n };\n const ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n };\n const rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n };\n const detect$1 = onDirection(ltr$1, rtl$1);\n const width = {\n delta: (amount, table) => detect$1(table).delta(amount, table),\n positions: (cols, table) => detect$1(table).positions(cols, table),\n edge: cell => detect$1(cell).edge(cell)\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n const isCol$2 = isTag('col');\n const getPercentSize = (elm, outerGetter, innerGetter) => {\n const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n return outerGetter(elm) / innerGetter(relativeParent) * 100;\n };\n const setPixelWidth = (cell, amount) => {\n set$1(cell, 'width', amount + 'px');\n };\n const setPercentageWidth = (cell, amount) => {\n set$1(cell, 'width', amount + '%');\n };\n const setHeight = (cell, amount) => {\n set$1(cell, 'height', amount + 'px');\n };\n const getHeightValue = cell => getRuntime(cell) + 'px';\n const convert = (cell, number, getter, setter) => {\n const newSize = table(cell).map(table => {\n const total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n const normalizePixelSize = (value, cell, getter, setter) => {\n const number = parseFloat(value);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n const getTotalHeight = cell => {\n const value = getHeightValue(cell);\n if (!value) {\n return get$8(cell);\n }\n return normalizePixelSize(value, cell, get$8, setHeight);\n };\n const get$7 = (cell, type, f) => {\n const v = f(cell);\n const span = getSpan(cell, type);\n return v / span;\n };\n const getRaw$1 = (element, prop) => {\n return getRaw$2(element, prop).orThunk(() => {\n return getOpt(element, prop).map(val => val + 'px');\n });\n };\n const getRawWidth$1 = element => getRaw$1(element, 'width');\n const getRawHeight = element => getRaw$1(element, 'height');\n const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n const getHeight = cell => {\n return get$7(cell, 'rowspan', getTotalHeight);\n };\n const getGenericWidth = cell => {\n const width = getRawWidth$1(cell);\n return width.bind(w => parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]));\n };\n const setGenericWidth = (cell, amount, unit) => {\n set$1(cell, 'width', amount + unit);\n };\n const getPixelTableWidth = table => get$9(table) + 'px';\n const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n const isCol$1 = isTag('col');\n const getRawW = cell => {\n return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n };\n const getRawH = cell => {\n return getRawHeight(cell).getOrThunk(() => getHeight(cell) + 'px');\n };\n const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n const isValidColumn = cell => {\n const browser = detect$2().browser;\n const supportsColWidths = browser.isChromium() || browser.isFirefox();\n return isCol$1(cell) ? supportsColWidths : true;\n };\n const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n const columnCells = columns(warehouse);\n const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n const colFilter = not(hasColspan);\n return map$1(columns$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, colFilter, column => {\n if (isValidColumn(column)) {\n return getWidth(column);\n } else {\n const cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n }\n }, fallback);\n });\n };\n const getDeduced = deduced => {\n return deduced.map(d => {\n return d + 'px';\n }).getOr('');\n };\n const getRawWidths = (warehouse, table) => {\n return getWidthFrom(warehouse, table, getRawW, getDeduced);\n };\n const getPercentageWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n return deduced.fold(() => {\n return tableSize.minCellWidth();\n }, cellWidth => {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n });\n };\n const getPixelWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n return deduced.getOrThunk(tableSize.minCellWidth);\n });\n };\n const getHeightFrom = (warehouse, table, direction, getHeight, fallback) => {\n const rows$1 = rows(warehouse);\n const backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), pos => pos.map(p => p.y)));\n return map$1(rows$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n });\n };\n const getPixelHeights = (warehouse, table, direction) => {\n return getHeightFrom(warehouse, table, direction, getHeight, deduced => {\n return deduced.getOrThunk(minHeight);\n });\n };\n const getRawHeights = (warehouse, table, direction) => {\n return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n };\n\n const widthLookup = (table, getter) => () => {\n if (inBody(table)) {\n return getter(table);\n } else {\n return parseFloat(getRaw$2(table, 'width').getOr('0'));\n }\n };\n const noneSize = table => {\n const getWidth = widthLookup(table, get$9);\n const zero = constant(0);\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n const percentageSize = table => {\n const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = delta => delta / getWidth() * 100;\n const singleColumnWidth = (w, _delta) => [100 - w];\n const minCellWidth = () => minWidth() / getWidth() * 100;\n const adjustTableWidth = delta => {\n const currentWidth = getFloatWidth();\n const change = delta / 100 * currentWidth;\n const newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n return {\n width: getFloatWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n const pixelSize = table => {\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = identity;\n const singleColumnWidth = (w, delta) => {\n const newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n const adjustTableWidth = delta => {\n const newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n const chooseSize = (element, width) => {\n const percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(element);\n } else {\n return pixelSize(element);\n }\n };\n const getTableSize = table => {\n const width = getRawWidth$1(table);\n return width.fold(() => noneSize(table), w => chooseSize(table, w));\n };\n const TableSize = {\n getTableSize,\n pixelSize,\n percentageSize,\n noneSize\n };\n\n const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n minRow,\n minCol,\n maxRow,\n maxCol,\n allCells,\n selectedCells\n });\n const findSelectedStats = (house, isSelected) => {\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n let minRow = totalRows;\n let minCol = totalColumns;\n let maxRow = 0;\n let maxCol = 0;\n const allCells = [];\n const selectedCells = [];\n each$1(house.access, detail => {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n const startRow = detail.row;\n const endRow = startRow + detail.rowspan - 1;\n const startCol = detail.column;\n const endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n const makeCell = (list, seenSelected, rowIndex) => {\n const row = list[rowIndex].element;\n const td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n const f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n const fillInGaps = (list, house, stats, isSelected) => {\n const rows = filter$2(list, row => row.section !== 'colgroup');\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n for (let i = 0; i < totalRows; i++) {\n let seenSelected = false;\n for (let j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(rows, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n const clean = (replica, stats, house, widthDelta) => {\n each$1(house.columns, col => {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$6(col.element);\n }\n });\n const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n each$2(emptyRows, remove$6);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), cell => {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n const tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n const colWidths = getPixelWidths(warehouse, table, tableSize);\n const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n const delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n const extract$1 = (table, selectedSelector) => {\n const isSelected = detail => is$2(detail.element, selectedSelector);\n const replica = deep(table);\n const list = fromTable$1(replica);\n const tableSize = TableSize.getTableSize(table);\n const replicaHouse = Warehouse.generate(list);\n const replicaStats = findSelectedStats(replicaHouse, isSelected);\n const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n each$2(unselectedCells, remove$6);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n const house = Warehouse.fromTable(table);\n const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n const nbsp = '\\xA0';\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$6 = element => api.get(element);\n const getOption = element => api.getOption(element);\n const set = (element, value) => api.set(element, value);\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse = elem => isHTMLElement(elem) && get$b(elem, 'contenteditable') === 'false';\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse(elem);\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last$1 = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$2(element);\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n const createCell = doc => () => {\n const td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n const createCol = doc => () => {\n return SugarElement.fromTag('col', doc.dom);\n };\n const createColgroup = doc => () => {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n const createRow$1 = doc => () => {\n return SugarElement.fromTag('tr', doc.dom);\n };\n const replace$1 = (cell, tag, attrs) => {\n const replica = copy$2(cell, tag);\n each$1(attrs, (v, k) => {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n const pasteReplace = cell => {\n return cell;\n };\n const cloneFormats = (oldCell, newCell, formats) => {\n const first$1 = first(oldCell);\n return first$1.map(firstText => {\n const formatSelector = formats.join(',');\n const parents = ancestors$3(firstText, formatSelector, element => {\n return eq$1(element, oldCell);\n });\n return foldr(parents, (last, parent) => {\n const clonedFormat = shallow(parent);\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n const cloneAppropriateAttributes = (original, clone) => {\n each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n };\n const cellOperations = (mutate, doc, formatsToClone) => {\n const cloneCss = (prev, clone) => {\n copy$1(prev.element, clone);\n remove$5(clone, 'height');\n if (prev.colspan !== 1) {\n remove$5(clone, 'width');\n }\n };\n const newCell = prev => {\n const td = SugarElement.fromTag(name(prev.element), doc.dom);\n const formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n const newCol = prev => {\n const col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n const paste$1 = doc => {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$2(SugarElement.fromDom(div));\n };\n const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n const option = name => editor => editor.options.get(name);\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultTableStyles = (editor, defaultStyles) => {\n if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_clone_elements', { processor: 'string[]' });\n registerOption('table_use_colgroups', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_header_type', {\n processor: value => {\n const valid = contains$2([\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: section, cells, sectionCells or auto.'\n };\n },\n default: 'section'\n });\n registerOption('table_sizing_mode', {\n processor: 'string',\n default: 'auto'\n });\n registerOption('table_default_attributes', {\n processor: 'object',\n default: { border: '1' }\n });\n registerOption('table_default_styles', {\n processor: 'object',\n default: { 'border-collapse': 'collapse' }\n });\n registerOption('table_column_resizing', {\n processor: value => {\n const valid = contains$2([\n 'preservetable',\n 'resizetable'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be preservetable, or resizetable.'\n };\n },\n default: 'preservetable'\n });\n registerOption('table_resize_bars', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_style_by_css', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_merge_content_on_paste', {\n processor: 'boolean',\n default: true\n });\n };\n const getTableCloneElements = editor => {\n return Optional.from(editor.options.get('table_clone_elements'));\n };\n const hasTableObjectResizing = editor => {\n const objectResizing = editor.options.get('object_resizing');\n return contains$2(objectResizing.split(','), 'table');\n };\n const getTableHeaderType = option('table_header_type');\n const getTableColumnResizingBehaviour = option('table_column_resizing');\n const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n const getTableSizingMode = option('table_sizing_mode');\n const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const hasTableResizeBars = option('table_resize_bars');\n const shouldStyleWithCss = option('table_style_by_css');\n const shouldMergeContentOnPaste = option('table_merge_content_on_paste');\n const getTableDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n };\n const getTableDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n };\n const tableUseColumnGroup = option('table_use_colgroups');\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable$1 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq$1(element, getBody(editor));\n const removeDataStyle = table => {\n remove$7(table, 'data-mce-style');\n const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n each$2(rows$1(table), removeStyleAttribute);\n };\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getPixelWidth = elm => elm.getBoundingClientRect().width;\n const getPixelHeight = elm => elm.getBoundingClientRect().height;\n const getRawWidth = (editor, elm) => {\n const raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Optional.from(raw).filter(isNotEmpty);\n };\n const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);\n\n const inSelection = (bounds, detail) => {\n const leftEdge = detail.column;\n const rightEdge = detail.column + detail.colspan - 1;\n const topEdge = detail.row;\n const bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const moveBy$1 = (warehouse, cell, row, column) => {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(d => {\n return d.element;\n });\n });\n };\n const intercepts$1 = (warehouse, start, finish) => {\n return getAnyBox(warehouse, start, finish).map(bounds => {\n const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map$1(inside, detail => {\n return detail.element;\n });\n });\n };\n const parentCell = (warehouse, innerCell) => {\n const isContainedBy = (c1, c2) => {\n return contains$1(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n return detail.element;\n });\n };\n\n const moveBy = (cell, deltaRow, deltaColumn) => {\n return table(cell).bind(table => {\n const warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n const intercepts = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n const warehouse = getWarehouse(table);\n const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n };\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone$2(source);\n setAll$1(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$5\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$3,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$6\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$2,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get$6,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const eq = (universe, item) => {\n return curry(universe.eq, item);\n };\n const ancestors$2 = (universe, start, end, isRoot = never) => {\n const ps1 = [start].concat(universe.up().all(start));\n const ps2 = [end].concat(universe.up().all(end));\n const prune = path => {\n const index = findIndex(path, isRoot);\n return index.fold(() => {\n return path;\n }, ind => {\n return path.slice(0, ind + 1);\n });\n };\n const pruned1 = prune(ps1);\n const pruned2 = prune(ps2);\n const shared = find$1(pruned1, x => {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared\n };\n };\n\n const sharedOne$1 = oneAll;\n const ancestors$1 = ancestors$2;\n\n const universe$3 = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe$3, (_universe, element) => {\n return look(element);\n }, elements);\n };\n const ancestors = (start, finish, isRoot) => {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n const lookupTable = container => {\n return ancestor$1(container, 'table');\n };\n const identify = (start, finish, isRoot) => {\n const getIsRoot = rootTable => {\n return element => {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start,\n finish\n });\n } else {\n return lookupTable(start).bind(startTable => {\n return lookupTable(finish).bind(finishTable => {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start,\n finish\n });\n } else if (contains$1(startTable, finishTable)) {\n const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start,\n finish: finishCell\n });\n } else if (contains$1(finishTable, startTable)) {\n const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(lca => {\n return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getLast = (boxes, lastSelectedSelector) => {\n return find$1(boxes, box => {\n return is$2(box, lastSelectedSelector);\n });\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n const expandTo = (finish, firstSelectedSelector) => {\n return ancestor$1(finish, 'table').bind(table => {\n return descendant(table, firstSelectedSelector).bind(start => {\n return identify(start, finish).bind(identified => {\n return identified.boxes.map(boxes => {\n return {\n boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n return getLast(boxes, lastSelectedSelector).bind(last => {\n return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq$1(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strAttributeSelector = '[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const attributeSelector = strAttributeSelector;\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n const paste = (element, clipboard, generators) => ({\n element,\n clipboard,\n generators\n });\n const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n selection: selection(selectedCells),\n clipboard,\n generators\n });\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n const extractSelected = cells => {\n return table(cells[0]).map(table => {\n const replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n const getTextContent = elements => map$1(elements, element => element.dom.innerText).join('');\n const registerEvents = (editor, actions) => {\n editor.on('BeforeGetContent', e => {\n const multiCellContext = cells => {\n e.preventDefault();\n extractSelected(cells).each(elements => {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n const cells = getCellsFromFakeSelection(editor);\n if (cells.length >= 1) {\n multiCellContext(cells);\n }\n }\n });\n editor.on('BeforeSetContent', e => {\n if (e.selection === true && e.paste === true) {\n const selectedCells = getCellsFromSelection(editor);\n head(selectedCells).each(cell => {\n table(cell).each(table => {\n const elements = filter$2(fromHtml(e.content), content => {\n return name(content) !== 'meta';\n });\n const isTable = isTag('table');\n if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = paste$1(doc);\n const targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(() => {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n const point = (element, offset) => ({\n element,\n offset\n });\n\n const scan$1 = (universe, element, direction) => {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(elem => {\n return scan$1(universe, elem, direction).orThunk(() => {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const toEnd = (universe, element) => {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n const children = universe.property().children(element);\n return children.length;\n };\n const freefallRtl$2 = (universe, element) => {\n const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n const children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n const freefallRtl$1 = freefallRtl$2;\n\n const universe$2 = DomUniverse();\n const freefallRtl = element => {\n return freefallRtl$1(universe$2, element);\n };\n\n const halve = (main, other) => {\n if (!hasColspan(main)) {\n const width = getGenericWidth(main);\n width.each(w => {\n const newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n const zero = array => map$1(array, constant(0));\n const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n if (!predicate(delta)) {\n return delta;\n } else {\n const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n const diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n const clampDelta = clampDeltaHelper(always);\n const resizeTable = () => {\n const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n const ratio = (100 + delta) / 100;\n const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, (size, idx) => {\n const newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n const resizeTable = (resizer, delta) => resizer(delta);\n const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n if (isRelative) {\n const tableWidth = totalWidth + pixelDelta;\n const ratio = tableWidth / totalWidth;\n const newSizes = map$1(sizes, size => size / ratio);\n return {\n delta: ratio * 100 - 100,\n newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n const preserveTable = () => {\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n const idx = delta >= 0 ? next : index;\n const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n const resizeTable = (resizer, delta, isLastColumn) => {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n if (isRelative) {\n return zero(sizes);\n } else {\n const diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n delta: 0,\n newSizes: sizes\n });\n return {\n resizeTable,\n clampTableDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n\n const getGridSize = table => {\n const warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n const isHeaderCell = isTag('th');\n const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map$1(rows, row => getRowType(row).type);\n const hasHeader = contains$2(rowTypes, 'header');\n const hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n const rowType = getRowType(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n\n const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n const section = () => ({\n transformRow,\n transformCell: (cell, comparator, substitution) => {\n const newCell = substitution(cell.element, comparator);\n const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n });\n const sectionCells = () => ({\n transformRow,\n transformCell\n });\n const cells = () => ({\n transformRow: (row, section) => {\n const newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell\n });\n const fallback = () => ({\n transformRow: identity,\n transformCell\n });\n const getTableSectionType = (table, fallback) => {\n const warehouse = Warehouse.fromTable(table);\n const type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n const TableSection = {\n getTableSectionType,\n section,\n sectionCells,\n cells,\n fallback\n };\n\n const setIfNot = (element, property, value, ignore) => {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n const insert$1 = (table, selector, element) => {\n last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n };\n const generateSection = (table, sectionName) => {\n const section = child(table, sectionName).getOrThunk(() => {\n const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n const render$1 = (table, grid) => {\n const newRows = [];\n const newCells = [];\n const syncRows = gridSection => map$1(gridSection, row => {\n if (row.isNew) {\n newRows.push(row.element);\n }\n const tr = row.element;\n empty(tr);\n each$2(row.cells, cell => {\n if (cell.isNew) {\n newCells.push(cell.element);\n }\n setIfNot(cell.element, 'colspan', cell.colspan, 1);\n setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n append$1(tr, cell.element);\n });\n return tr;\n });\n const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n }));\n const renderSection = (gridSection, sectionName) => {\n const section = generateSection(table, sectionName);\n const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n const sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n const removeSection = sectionName => {\n child(table, sectionName).each(remove$6);\n };\n const renderOrRemoveSection = (gridSection, sectionName) => {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n const headSection = [];\n const bodySection = [];\n const footSection = [];\n const columnGroupsSection = [];\n each$2(grid, row => {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows,\n newCells\n };\n };\n const copy = grid => map$1(grid, row => {\n const tr = shallow(row.element);\n each$2(row.cells, cell => {\n const clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append$1(tr, clonedCell);\n });\n return tr;\n });\n\n const getColumn = (grid, index) => {\n return map$1(grid, row => {\n return getCell(row, index);\n });\n };\n const getRow = (grid, index) => {\n return grid[index];\n };\n const findDiff = (xs, comp) => {\n if (xs.length === 0) {\n return 0;\n }\n const first = xs[0];\n const index = findIndex(xs, x => {\n return !comp(first.element, x.element);\n });\n return index.getOr(xs.length);\n };\n const subgrid = (grid, row, column, comparator) => {\n const gridRow = getRow(grid, row);\n const isColRow = gridRow.section === 'colgroup';\n const colspan = findDiff(gridRow.cells.slice(column), comparator);\n const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n return {\n colspan,\n rowspan\n };\n };\n\n const toDetails = (grid, comparator) => {\n const seen = map$1(grid, row => map$1(row.cells, never));\n const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n for (let column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, (row, rowIndex) => {\n const details = bind$2(row.cells, (cell, columnIndex) => {\n if (seen[rowIndex][columnIndex] === false) {\n const result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n const toGrid = (warehouse, generators, isNew) => {\n const grid = [];\n each$2(warehouse.colgroups, colgroup => {\n const colgroupCols = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n colgroupCols.push(element);\n }\n grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n });\n for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n const rowCells = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n rowCells.push(element);\n }\n const rowDetail = warehouse.all[rowIndex];\n const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n grid.push(row);\n }\n return grid;\n };\n\n const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n const toDetailList = grid => toDetails(grid, eq$1);\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map$1(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n const warehouse = Warehouse.fromTable(table);\n const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n const output = extract(warehouse, target).map(info => {\n const model = fromWarehouse(warehouse, generators);\n const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n const lockedColumns = getLockedColumnsFromGrid(result.grid);\n const grid = toDetailList(result.grid);\n return {\n info,\n grid,\n cursor: result.cursor,\n lockedColumns\n };\n });\n return output.bind(out => {\n const newElements = render$1(table, out.grid);\n const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n const value = {\n ...details,\n generators: target.generators,\n clipboard: target.clipboard\n };\n return value;\n }));\n const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n cells,\n generators: target.generators,\n clipboard: target.clipboard\n }));\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const merge$2 = (grid, bounds, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n const row = rows[i];\n const isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n const unmerge = (grid, target, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n let first = true;\n for (let i = 0; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const currentCell = getCell(row, j);\n const currentCellElm = currentCell.element;\n const isToReplace = comparator(currentCellElm, target);\n if (isToReplace && !first) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace) {\n first = false;\n }\n }\n }\n return grid;\n };\n const uniqueCells = (row, comparator) => {\n return foldl(row, (rest, cell) => {\n return exists(rest, currentCell => {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n const splitCols = (grid, index, comparator, substitution) => {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, row => {\n const prevCell = row.cells[index - 1];\n let offset = 0;\n const substitute = substitution();\n while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n offset++;\n }\n });\n }\n return grid;\n };\n const splitRows = (grid, index, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n const rowPrevCells = rows[index - 1].cells;\n const cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, cell => {\n let replacement = Optional.none();\n for (let i = index; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const current = getCell(row, j);\n const isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(sub => {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n }\n }\n });\n }\n return grid;\n };\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply,\n orThunk: apply,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const measure = (startAddress, gridA, gridB) => {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n const rowRemainder = gridA.slice(startAddress.row);\n const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n const colRequired = cellLength(gridB[0]);\n const rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n const measureWidth = (gridA, gridB) => {\n const colLengthA = cellLength(gridA[0]);\n const colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n const measureHeight = (gridA, gridB) => {\n const rowLengthA = gridA.length;\n const rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n const generateElements = (amount, row, generators, isLocked) => {\n const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n };\n const rowFill = (grid, amount, generators, lockedColumns) => {\n const exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, () => {\n const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n const row = clone(exampleRow, generator, identity);\n const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n return setCells(row, elements);\n }));\n };\n const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n const newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n return foldl(lockedColumns, (acc, colNum) => {\n const newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n const tailor = (gridA, delta, generators) => {\n const fillCols = delta.colDelta < 0 ? colFill : identity;\n const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const gridWidth = cellLength(gridA[0]);\n const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n const isSpanning = (grid, row, col, comparator) => {\n const candidate = getCell(grid[row], col);\n const matching = curry(comparator, candidate.element);\n const currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n const startRow = startAddress.row;\n const startCol = startAddress.column;\n const mergeHeight = gridBRows.length;\n const mergeWidth = cellLength(gridBRows[0]);\n const endRow = startRow + mergeHeight;\n const endCol = startCol + mergeWidth + lockedColumns.length;\n const lockedColumnObj = mapToObject(lockedColumns, always);\n for (let r = startRow; r < endRow; r++) {\n let skippedCol = 0;\n for (let c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n const gridBColIndex = c - startCol - skippedCol;\n const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n const newCellElm = newCell.element;\n const replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n const gridColLength = cellLength(grid[0]);\n const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n const gridBRows = extractGridDetails(gridB).rows;\n const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n const result = measure(validStartAddress, gridA, gridBRows);\n return result.map(diff => {\n const delta = {\n ...diff,\n colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n };\n const fittedGrid = tailor(gridA, delta, generator);\n const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n const insertCols = (index, gridA, gridB, generator, comparator) => {\n splitCols(gridA, index, comparator, generator.cell);\n const delta = measureHeight(gridB, gridA);\n const fittedNewGrid = tailor(gridB, delta, generator);\n const secondDelta = measureHeight(gridA, fittedNewGrid);\n const fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, (gridRow, i) => {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n const insertRows = (index, gridA, gridB, generator, comparator) => {\n splitRows(gridA, index, comparator, generator.cell);\n const locked = getLockedColumnsFromGrid(gridA);\n const diff = measureWidth(gridA, gridB);\n const delta = {\n ...diff,\n colDelta: diff.colDelta - locked.length\n };\n const fittedOldGrid = tailor(gridA, delta, generator);\n const {\n cols: oldCols,\n rows: oldRows\n } = extractGridDetails(fittedOldGrid);\n const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n const secondDiff = measureWidth(gridB, gridA);\n const secondDelta = {\n ...secondDiff,\n colDelta: secondDiff.colDelta + newLocked.length\n };\n const fittedGridB = lockedColFill(gridB, generator, newLocked);\n const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return [\n ...oldCols,\n ...oldRows.slice(0, index),\n ...fittedNewGrid,\n ...oldRows.slice(index, oldRows.length)\n ];\n };\n\n const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n const insertRowAt = (grid, index, example, comparator, substitution) => {\n const {rows, cols} = extractGridDetails(grid);\n const before = rows.slice(0, index);\n const after = rows.slice(index);\n const newRow = cloneRow(rows[example], (ex, c) => {\n const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return [\n ...cols,\n ...before,\n newRow,\n ...after\n ];\n };\n const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n if (section === 'colgroup' || !withinSpan) {\n const cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n const existingCells = row.cells;\n const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n const deleteRowsAt = (grid, start, finish) => {\n const {rows, cols} = extractGridDetails(grid);\n return [\n ...cols,\n ...rows.slice(0, start),\n ...rows.slice(finish + 1)\n ];\n };\n\n const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n const rowReplacerPredicate = (targetRow, columnHeaders) => {\n const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && columnHeaders[colIndex]);\n };\n };\n const columnReplacePredicate = (targetColumn, rowHeaders) => {\n const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && rowHeaders[rowIndex]);\n };\n };\n const determineScope = (applyScope, cell, newScope, isInHeader) => {\n const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n if (applyScope) {\n return isHeaderCell(cell) ? getScope(newScope) : null;\n } else if (isInHeader && isHeaderCell(cell)) {\n const oppositeScope = newScope === 'row' ? 'col' : 'row';\n return getScope(oppositeScope);\n } else {\n return null;\n }\n };\n const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n const isTarget = cell => {\n return exists(targets, target => {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, (row, rowIndex) => {\n return mapCells(row, (cell, colIndex) => {\n if (isTarget(cell)) {\n const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n genScope(newCell, rowIndex, colIndex).each(scope => {\n setOptions(newCell.element, { scope: Optional.from(scope) });\n });\n return newCell;\n } else {\n return cell;\n }\n });\n });\n };\n const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n });\n const getRowCells = (rows, rowIndex, comparator) => {\n const targetRow = rows[rowIndex];\n return bind$2(targetRow.cells, (item, i) => {\n return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n });\n };\n const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n };\n const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n const {cols, rows} = extractGridDetails(grid);\n const targetRow = rows[indexes[0]];\n const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n const newRows = [...rows];\n each$2(indexes, index => {\n newRows[index] = tableSection.transformRow(rows[index], section);\n });\n const newGrid = [\n ...cols,\n ...newRows\n ];\n const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n };\n const replaceCells = (grid, details, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n };\n\n const generate = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$2(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n const adt$6 = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n const ColumnContext = { ...adt$6 };\n\n const neighbours = (input, index) => {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n const determine = (input, column, step, tableSize, resize) => {\n const result = input.slice(0);\n const context = neighbours(input, column);\n const onNone = constant(map$1(result, constant(0)));\n const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n const total = (start, end, measures) => {\n let r = 0;\n for (let i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n const recalculateWidthForCells = (warehouse, widths) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width,\n colspan: cell.colspan\n };\n });\n };\n const recalculateWidthForColumns = (warehouse, widths) => {\n const groups = Warehouse.justColumns(warehouse);\n return map$1(groups, (column, index) => ({\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n }));\n };\n const recalculateHeightForCells = (warehouse, heights) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const height = total(cell.row, cell.row + cell.rowspan, heights);\n return {\n element: cell.element,\n height,\n rowspan: cell.rowspan\n };\n });\n };\n const matchRowHeight = (warehouse, heights) => {\n return map$1(warehouse.all, (row, i) => {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n const recalculate = (warehouse, widths) => {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n const recalculateAndApply = (warehouse, widths, tableSize) => {\n const newSizes = recalculate(warehouse, widths);\n each$2(newSizes, cell => {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n const adjustWidth = (table, delta, index, resizing, tableSize) => {\n const warehouse = Warehouse.fromTable(table);\n const step = tableSize.getCellDelta(delta);\n const widths = tableSize.getWidths(warehouse, tableSize);\n const isLastColumn = index === warehouse.grid.columns - 1;\n const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n const adjustHeight = (table, delta, index, direction) => {\n const warehouse = Warehouse.fromTable(table);\n const heights = getPixelHeights(warehouse, table, direction);\n const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n const newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n const newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, row => {\n setHeight(row.element, row.height);\n });\n each$2(newCellSizes, cell => {\n setHeight(cell.element, cell.height);\n });\n const total = sumUp(newHeights);\n setHeight(table, total);\n };\n const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n const warehouse = Warehouse.generate(list);\n const sizes = tableSize.getWidths(warehouse, tableSize);\n const tablePixelWidth = tableSize.pixelWidth();\n const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n const adjustWidthTo = (_table, list, _info, tableSize) => {\n const warehouse = Warehouse.generate(list);\n const widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n const uniqueColumns = details => {\n const uniqueCheck = (rest, detail) => {\n const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n };\n\n const isCol = isTag('col');\n const isColgroup = isTag('colgroup');\n const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n const elementToData = element => {\n const colspan = getAttrValue(element, 'colspan', 1);\n const rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element,\n colspan,\n rowspan\n };\n };\n const modification = (generators, toData = elementToData) => {\n const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n const add = element => {\n if (isRow$1(element)) {\n return nuRow({ element });\n } else {\n const cell = element;\n const replacement = nuCell(toData(cell));\n recent = Optional.some({\n item: cell,\n replacement\n });\n return replacement;\n }\n };\n let recent = Optional.none();\n const getOrInit = (element, comparator) => {\n return recent.fold(() => {\n return add(element);\n }, p => {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit };\n };\n const transform$1 = tag => {\n return generators => {\n const list = [];\n const find = (element, comparator) => {\n return find$1(list, x => {\n return comparator(x.item, element);\n });\n };\n const makeNew = element => {\n const attrs = tag === 'td' ? { scope: null } : {};\n const cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n const replaceOrInit = (element, comparator) => {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n const cell = element;\n return find(cell, comparator).fold(() => {\n return makeNew(cell);\n }, p => {\n return comparator(element, p.item) ? p.sub : makeNew(cell);\n });\n }\n };\n return { replaceOrInit };\n };\n };\n const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n const merging = generators => {\n const unmerge = cell => {\n const scope = getScopeAttribute(cell);\n scope.each(attribute => set$2(cell, 'scope', attribute));\n return () => {\n const raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$5(raw, 'width');\n remove$5(cell, 'width');\n scope.each(attribute => set$2(raw, 'scope', attribute));\n return raw;\n };\n };\n const merge = cells => {\n const getScopeProperty = () => {\n const stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n const baseScope = stringAttributes[0];\n const scopes = [\n 'row',\n 'col'\n ];\n const isMixed = exists(stringAttributes, attribute => {\n return attribute !== baseScope && contains$2(scopes, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope);\n }\n };\n remove$5(cells[0], 'width');\n getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n return constant(cells[0]);\n };\n return {\n unmerge,\n merge\n };\n };\n const Generators = {\n modification,\n transform: transform$1,\n merging\n };\n\n const blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n const isList$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n const isBlock$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n const isEmptyTag$1 = (universe, item) => {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n const universe$1 = DomUniverse();\n const isBlock = element => {\n return isBlock$1(universe$1, element);\n };\n const isList = element => {\n return isList$1(universe$1, element);\n };\n const isEmptyTag = element => {\n return isEmptyTag$1(universe$1, element);\n };\n\n const merge = cells => {\n const isBr = isTag('br');\n const advancedBr = children => {\n return forall(children, c => {\n return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n });\n };\n const isListItem = el => {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n const siblingIsBlock = el => {\n return nextSibling(el).map(rightSibling => {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n const markCell = cell => {\n return last$1(cell).bind(rightEdge => {\n const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(parent => {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n const markContent = () => {\n const content = bind$2(cells, cell => {\n const children = children$2(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n const contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n const isEditable = elem => isEditable$1(elem, true);\n const prune = table => {\n const cells = cells$1(table);\n if (cells.length === 0) {\n remove$6(table);\n }\n };\n const outcome = (grid, cursor) => ({\n grid,\n cursor\n });\n const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n const elem = cell.element;\n return someIf(isEditable(elem), elem);\n }));\n const elementFromGrid = (grid, row, column) => {\n var _a, _b;\n const rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n };\n const bundle = (grid, row, column) => {\n const cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n const uniqueRows = details => {\n const rowCompilation = (rest, detail) => {\n const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n };\n const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n const targetIndex = details[0].row;\n const rows = uniqueRows(details);\n const newGrid = foldr(rows, (acc, row) => {\n const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n const rows = uniqueRows(details);\n const target = rows[rows.length - 1];\n const targetIndex = target.row + target.rowspan;\n const newGrid = foldr(rows, (newG, row) => {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const columns = uniqueColumns(details);\n const targetIndex = columns[0].column;\n const newGrid = foldr(columns, (acc, col) => {\n const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const target = details[details.length - 1];\n const targetIndex = target.column + target.colspan;\n const columns = uniqueColumns(details);\n const newGrid = foldr(columns, (newG, col) => {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n const rows = uniqueRows(details);\n const rowIndexes = map$1(rows, detail => detail.row);\n const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeRowsHeader = makeRowsSection('thead', true);\n const opMakeRowsBody = makeRowsSection('tbody', false);\n const opMakeRowsFooter = makeRowsSection('tfoot', false);\n const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n const columns = uniqueColumns(extractDetail.details);\n const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n const rows = uniqueRows(details);\n const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n const maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n const cells = mergable.cells;\n merge(cells);\n const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n const newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n const gridify = (table, generators) => {\n const wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n const startAddress = address(pasteDetails.row, pasteDetails.column);\n const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n const gridifyRows = (rows, generators, context) => {\n const pasteDetails = fromPastedRows(rows, context.section);\n const wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].column;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].row;\n const context = rows[index];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opGetColumnsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n const opGetCellsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n const getColumnsWidth = (warehouse, details) => {\n const columns$1 = columns(warehouse);\n const uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, (acc, detail) => {\n const column = columns$1[detail.column];\n const colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(details => ({\n details,\n pixelDelta: getColumnsWidth(warehouse, details)\n }));\n const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n }));\n const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n const headerCellGenerator = Generators.transform('th');\n const bodyCellGenerator = Generators.transform('td');\n const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n const getColumnsType = opGetColumnsType;\n const getCellsType = opGetCellsType;\n const getRowsType = opGetRowsType;\n\n const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n editor.dispatch('TableSelectionChange', {\n cells,\n start,\n finish,\n otherCells\n });\n };\n const fireTableSelectionClear = editor => {\n editor.dispatch('TableSelectionClear');\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const styleModified = {\n structure: false,\n style: true\n };\n const structureModified = {\n structure: true,\n style: false\n };\n const styleAndStructureModified = {\n structure: true,\n style: true\n };\n\n const get$5 = (editor, table) => {\n if (isTablePercentagesForced(editor)) {\n return TableSize.percentageSize(table);\n } else if (isTablePixelsForced(editor)) {\n return TableSize.pixelSize(table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n const isTableBody = editor => name(getBody(editor)) === 'table';\n const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n const cloneFormats = getTableCloneElements(editor);\n const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n const getTableSectionType = table => {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n const cells = cells$1(table);\n return head(cells).filter(inBody).map(firstCell => {\n cellSelectionHandler.clearSelectedCells(table.dom);\n const rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, cell => {\n const des = freefallRtl(cell);\n const rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelectionHandler.clearSelectedCells(table.dom);\n return Optional.some(rng);\n });\n const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n removeDataStyle(table);\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = cellOperations(mutate, doc, cloneFormats);\n const behaviours = {\n sizing: get$5(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n resizeHandler.refresh(table.dom);\n each$2(result.newRows, row => {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, cell => {\n fireNewCell(editor, cell.dom);\n });\n const range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(rng => ({\n rng,\n effect\n }));\n }) : Optional.none();\n };\n const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n const getTableCellType = getCellsType;\n const getTableColType = getColumnsType;\n const getTableRowType = getRowsType;\n return {\n deleteRow,\n deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType,\n getTableCellType,\n getTableColType\n };\n };\n\n const constrainSpan = (element, property, value) => {\n const currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n const isColInRange = (minColRange, maxColRange) => cell => {\n const endCol = cell.column + cell.colspan - 1;\n const startCol = cell.column;\n return endCol >= minColRange && startCol < maxColRange;\n };\n const generateColGroup = (house, minColRange, maxColRange) => {\n if (Warehouse.hasColumns(house)) {\n const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n const copiedCols = map$1(colsToCopy, c => {\n const clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n const fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n const copiedCells = map$1(cellsToCopy, cell => {\n const clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n const fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n const copyCols = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onUnlockedCells(house, target);\n return details.map(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n const fakeRows = generateRows(house, minColRange, maxColRange);\n return [\n ...fakeColGroups,\n ...fakeRows\n ];\n });\n };\n\n const copyRows = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.bind(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const rows = extractGridDetails(grid).rows;\n const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n const filteredGrid = bind$2(slicedGrid, row => {\n const newCells = filter$2(row.cells, cell => !cell.isLocked);\n return newCells.length > 0 ? [{\n ...row,\n cells: newCells\n }] : [];\n });\n const slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(slicedDetails => copy(slicedDetails));\n };\n\n const adt$5 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n const validateFor = (suffix, type, value) => {\n const rawAmount = value.substring(0, value.length - suffix.length);\n const amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n };\n const from = value => {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$5.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$5.pixels, value);\n }\n return adt$5.invalid(value);\n };\n const Size = {\n ...adt$5,\n from\n };\n\n const redistributeToPercent = (widths, totalWidth) => {\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n const ratio = px / totalWidth * 100;\n return ratio + '%';\n }, pc => {\n return pc + '%';\n });\n });\n };\n const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n const scale = newTotalWidth / totalWidth;\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n return px * scale + 'px';\n }, pc => {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n const redistributeEmpty = (newWidthType, columns) => {\n const f = newWidthType.fold(() => constant(''), pixels => {\n const num = pixels / columns;\n return constant(num + 'px');\n }, () => {\n const num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(columns, f);\n };\n const redistributeValues = (newWidthType, widths, totalWidth) => {\n return newWidthType.fold(() => {\n return widths;\n }, px => {\n return redistributeToPx(widths, totalWidth, px);\n }, _pc => {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n const redistribute$1 = (widths, totalWidth, newWidth) => {\n const newType = Size.from(newWidth);\n const floats = forall(widths, s => {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n const sum = (values, fallback) => {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, (rest, v) => {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n const roundDown = (num, unit) => {\n const floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n const add$3 = (value, amount) => {\n return Size.from(value).fold(constant(value), px => {\n return px + amount + 'px';\n }, pc => {\n return pc + amount + '%';\n });\n };\n const normalize = values => {\n if (values.length === 0) {\n return values;\n }\n const scan = foldr(values, (rest, value) => {\n const info = Size.from(value).fold(() => ({\n value,\n remainder: 0\n }), num => roundDown(num, 'px'), num => ({\n value: num + '%',\n remainder: 0\n }));\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n const r = scan.output;\n return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n const validate = Size.from;\n\n const redistributeToW = (newWidths, cells, unit) => {\n each$2(cells, cell => {\n const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n const w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n const redistributeToColumns = (newWidths, columns, unit) => {\n each$2(columns, (column, index) => {\n const width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n const redistributeToH = (newHeights, rows, cells, unit) => {\n each$2(cells, cell => {\n const heights = newHeights.slice(cell.row, cell.rowspan + cell.row);\n const h = sum(heights, minHeight());\n set$1(cell.element, 'height', h + unit);\n });\n each$2(rows, (row, i) => {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n const getUnit = newSize => {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n const redistribute = (table, optWidth, optHeight) => {\n const warehouse = Warehouse.fromTable(table);\n const rows = warehouse.all;\n const cells = Warehouse.justCells(warehouse);\n const columns = Warehouse.justColumns(warehouse);\n optWidth.each(newWidth => {\n const widthUnit = getUnit(newWidth);\n const totalWidth = get$9(table);\n const oldWidths = getRawWidths(warehouse, table);\n const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(newHeight => {\n const hUnit = getUnit(newHeight);\n const totalHeight = get$8(table);\n const oldHeights = getRawHeights(warehouse, table, height);\n const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells, hUnit);\n set$1(table, 'height', newHeight);\n });\n };\n const isPercentSizing = isPercentSizing$1;\n const isPixelSizing = isPixelSizing$1;\n const isNoneSizing = isNoneSizing$1;\n\n const cleanupLegacyAttributes = element => {\n remove$7(element, 'width');\n };\n const convertToPercentSize = table => {\n const newWidth = getPercentTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSize = table => {\n const newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToNoneSize = table => {\n remove$5(table, 'width');\n const columns = columns$1(table);\n const rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, cell => {\n remove$5(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n const DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n const tableHeaderCell = () => SugarElement.fromTag('th');\n const tableCell = () => SugarElement.fromTag('td');\n const tableColumn = () => SugarElement.fromTag('col');\n const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n const tr = SugarElement.fromTag('tr');\n for (let j = 0; j < columns; j++) {\n const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n const createGroupRow = columns => {\n const columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, () => append$1(columnGroup, tableColumn()));\n return columnGroup;\n };\n const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n const table = SugarElement.fromTag('table');\n const rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n const actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n const thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n const tbody = SugarElement.fromTag('tbody');\n append$1(table, tbody);\n const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append(tbody, tbodyRows);\n return table;\n };\n\n const get$4 = element => element.dom.innerHTML;\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$4(container);\n };\n\n const placeCaretInCell = (editor, cell) => {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n const selectFirstCellInTable = (editor, tableElm) => {\n descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n const fireEvents = (editor, table) => {\n each$2(descendants(table, 'tr'), row => {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), cell => {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n const defaultStyles = getTableDefaultStyles(editor);\n const options = {\n styles: defaultStyles,\n attributes: getTableDefaultAttributes(editor),\n colGroups: tableUseColumnGroup(editor)\n };\n editor.undoManager.ignore(() => {\n const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n const html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n if (isTablePixelsForced(editor)) {\n convertToPixelSize(table);\n } else if (isTableResponsiveForced(editor)) {\n convertToNoneSize(table);\n } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n convertToPercentSize(table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOrNull();\n };\n const insertTable = (editor, rows, columns, options = {}) => {\n const checkInput = val => isNumber(val) && val > 0;\n if (checkInput(rows) && checkInput(columns)) {\n const headerRows = options.headerRows || 0;\n const headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n return null;\n }\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const setData = items => {\n const fakeClipboardItem = global.FakeClipboardItem(items);\n global.write([fakeClipboardItem]);\n };\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const clearData = type => {\n if (getData(type).isSome()) {\n global.clear();\n }\n };\n const setRows = rowsOpt => {\n rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n };\n const getRows = () => getData(tableTypeRow);\n const clearRows = () => clearData(tableTypeRow);\n const setColumns = columnsOpt => {\n columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n };\n const getColumns = () => getData(tableTypeColumn);\n const clearColumns = () => clearData(tableTypeColumn);\n\n const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const registerCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n const cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$6(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n const rng = editor.dom.createRng();\n rng.setStart(cursor.dom, 0);\n rng.setEnd(cursor.dom, 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(table => {\n if (sizing === 'relative' && !isPercentSizing(table)) {\n convertToPercentSize(table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n convertToPixelSize(table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n convertToNoneSize(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n const getTableFromCell = cell => table(cell, isRoot);\n const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n const toggleTableClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleTableCellClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n const selectedCells = getCellsFromSelection(editor);\n const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleCaption = () => {\n getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).each(table => {\n child(table, 'caption').fold(() => {\n const caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, caption => {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n }\n remove$6(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n const postExecute = _data => {\n editor.focus();\n };\n const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n const copyColSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n return copyCols(table, targets);\n });\n const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n const clonedRows = map$1(rows, row => deep(row));\n performActionOnSelection((table, startCell) => {\n const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n actOnSelection(getAction(type), args.no_events);\n });\n each$1({\n mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n mceTableCutCol: () => copyColSelection().each(selection => {\n setColumns(selection);\n actOnSelection(actions.deleteColumn);\n }),\n mceTableCutRow: () => copyRowSelection().each(selection => {\n setRows(selection);\n actOnSelection(actions.deleteRow);\n }),\n mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n mceTableRowType: actOnType(type => {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, (func, name) => editor.addCommand(name, func));\n editor.addCommand('mceInsertTable', (_ui, args) => {\n insertTable(editor, args.rows, args.columns, args.options);\n });\n editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n if (!isObject(args)) {\n return;\n }\n const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1);\n if (cells.length === 0) {\n return;\n }\n const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, (value, style) => {\n const formatName = getFormatName(style);\n each$2(cells, cell => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n } else {\n editor.formatter.apply(formatName, { value }, cell.dom);\n }\n });\n });\n getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n });\n };\n\n const registerQueryCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n const targets = forMenu(getCellsFromSelection(editor), table, cell);\n return action(table, targets);\n })).getOr('');\n each$1({\n mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n mceTableColType: () => lookupOnSelection(actions.getTableColType)\n }, (func, name) => editor.addQueryValueHandler(name, func));\n };\n\n const adt$4 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before$2 = adt$4.before;\n const on = adt$4.on;\n const after$3 = adt$4.after;\n const Situ = {\n before: before$2,\n on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n const create$4 = (selection, kill) => ({\n selection,\n kill\n });\n const Response = { create: create$4 };\n\n const selectNode = (win, element) => {\n const rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n const selectNodeContents = (win, element) => {\n const rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const create$2 = (start, soffset, finish, foffset) => {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n const Situs = { create: create$2 };\n\n const convertToRange = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n const makeSitus = Situs.create;\n\n const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(s => {\n return closest$1(finish, 'td,th', isRoot).bind(f => {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const detect = (container, isRoot, start, finish, selectRange) => {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n const update = (rows, columns, container, selected, annotations) => {\n const updateSelection = newSels => {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n const traverse = (item, mode) => ({\n item,\n mode\n });\n const backtrack = (universe, item, _direction, transition = sidestep) => {\n return universe.property().parent(item).map(p => {\n return traverse(p, transition);\n });\n };\n const sidestep = (universe, item, direction, transition = advance) => {\n return direction.sibling(universe, item).map(p => {\n return traverse(p, transition);\n });\n };\n const advance = (universe, item, direction, transition = advance) => {\n const children = universe.property().children(item);\n const result = direction.first(children);\n return result.map(r => {\n return traverse(r, transition);\n });\n };\n const successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n const go = (universe, item, mode, direction, rules = successors) => {\n const ruleOpt = find$1(rules, succ => {\n return succ.current === mode;\n });\n return ruleOpt.bind(rule => {\n return rule.current(universe, item, direction, rule.next).orThunk(() => {\n return rule.fallback.bind(fb => {\n return go(universe, item, fb, direction);\n });\n });\n });\n };\n\n const left$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().prevSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const right$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().nextSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const Walkers = {\n left: left$1,\n right: right$1\n };\n\n const hone = (universe, item, predicate, mode, direction, isRoot) => {\n const next = go(universe, item, mode, direction);\n return next.bind(n => {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n const left = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n const right = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n const isLeaf = universe => element => universe.property().children(element).length === 0;\n const before$1 = (universe, item, isRoot) => {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n const after$2 = (universe, item, isRoot) => {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n const seekLeft$1 = left;\n const seekRight$1 = right;\n\n const universe = DomUniverse();\n const before = (element, isRoot) => {\n return before$1(universe, element, isRoot);\n };\n const after$1 = (element, isRoot) => {\n return after$2(universe, element, isRoot);\n };\n const seekLeft = (element, predicate, isRoot) => {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n const seekRight = (element, predicate, isRoot) => {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n const adt$2 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n const isOverlapping = (bridge, before, after) => {\n const beforeBounds = bridge.getRect(before);\n const afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n const isRow = elem => {\n return closest$1(elem, 'tr');\n };\n const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(() => {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n }, _sharedRow => {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n }\n });\n }).getOr(adt$2.none('default'));\n };\n const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n const BeforeAfter = {\n ...adt$2,\n verify,\n cata\n };\n\n const inParent = (parent, children, element, index) => ({\n parent,\n children,\n element,\n index\n });\n const indexInParent = element => parent(element).bind(parent => {\n const children = children$2(parent);\n return indexOf(children, element).map(index => inParent(parent, children, element, index));\n });\n const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n const isBr = isTag('br');\n const gatherer = (cand, gather, isRoot) => {\n return gather(cand, isRoot).bind(target => {\n return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n const handleBr = (isRoot, element, direction) => {\n return direction.traverse(element).orThunk(() => {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n const findBr = (element, offset) => {\n return child$2(element, offset).filter(isBr).orThunk(() => {\n return child$2(element, offset - 1).filter(isBr);\n });\n };\n const handleParent = (isRoot, element, offset, direction) => {\n return findBr(element, offset).bind(br => {\n return direction.traverse(br).fold(() => {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, adjacent => {\n return indexInParent(adjacent).map(info => {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n const tryBr = (isRoot, element, offset, direction) => {\n const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(tgt => {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n const process = analysis => {\n return BeforeAfter.cata(analysis, _message => {\n return Optional.none();\n }, () => {\n return Optional.none();\n }, cell => {\n return Optional.some(point(cell, 0));\n }, cell => {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n const moveDown = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n const moveUp = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n const translate = (caret, xDelta, yDelta) => {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n const getTop = caret => {\n return caret.top;\n };\n const getBottom = caret => {\n return caret.bottom;\n };\n\n const getPartialBox = (bridge, element, offset) => {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n const toCaret = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n const getElemBox = (bridge, element) => {\n return Optional.some(bridge.getRect(element));\n };\n const getBoxAt = (bridge, element, offset) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n const getEntireBox = (bridge, element) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n const JUMP_SIZE = 5;\n const NUM_RETRIES = 100;\n const adt$1 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n const isOutside = (caret, box) => {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n const inOutsideBlock = (bridge, element, caret) => {\n return closest$2(element, isBlock).fold(never, cell => {\n return getEntireBox(bridge, cell).exists(box => {\n return isOutside(caret, box);\n });\n });\n };\n const adjustDown = (bridge, element, guessBox, original, caret) => {\n const lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$1.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const adjustUp = (bridge, element, guessBox, original, caret) => {\n const higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$1.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n const downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$1\n };\n const isAtTable = (bridge, x, y) => {\n return bridge.elementFromPoint(x, y).filter(elm => {\n return name(elm) === 'table';\n }).isSome();\n };\n const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n const adjustTil = (bridge, movement, original, caret, numRetries) => {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n return guess.start.fold(Optional.none, element => {\n return getEntireBox(bridge, element).bind(guessBox => {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(() => {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n const checkScroll = (movement, adjusted, bridge) => {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n const retry = (movement, bridge, caret) => {\n const moved = movement.move(caret, JUMP_SIZE);\n const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(() => {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, delta => {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n const Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n getJumpSize: constant(JUMP_SIZE)\n };\n\n const MAX_RETRIES = 20;\n const findSpot = (bridge, isRoot, direction) => {\n return bridge.getSelection().bind(sel => {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n return Optional.some(point(sel.finish, sel.foffset));\n }, brNeighbour => {\n const range = bridge.fromSitus(brNeighbour);\n const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n const range = bridge.fromSitus(situs);\n const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, () => {\n return Optional.none();\n }, () => {\n return Optional.some(situs);\n }, cell => {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, cell => {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n const tryAgain = (bridge, element, offset, move, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n const tryAt = (bridge, direction, box) => {\n const browser = detect$2().browser;\n if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n return direction.retry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n const tryCursor = (bridge, isRoot, element, offset, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, box);\n });\n };\n const handle$1 = (bridge, isRoot, direction) => {\n return findSpot(bridge, isRoot, direction).bind(spot => {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n const inSameTable = (elem, table) => {\n return ancestor(elem, e => {\n return parent(e).exists(p => {\n return eq$1(p, table);\n });\n });\n };\n const simulate = (bridge, isRoot, direction, initial, anchor) => {\n return closest$1(initial, 'td,th', isRoot).bind(start => {\n return closest$1(start, 'table', isRoot).bind(table => {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$1(bridge, isRoot, direction).bind(range => {\n return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n return {\n start,\n finish,\n range\n };\n });\n });\n });\n });\n };\n const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n return precheck(initial, isRoot).orThunk(() => {\n return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n const range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n };\n const firstUpCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, element => {\n return last$1(element).isSome();\n }, isRoot).map(last => {\n const lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const lastDownCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, element => {\n return first(element).isSome();\n }, isRoot).map(first => {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n return detect(container, isRoot, info.start, info.finish, selectRange);\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n const isInEditableContext = cell => parentElement(cell).exists(isEditable$1);\n const MouseSelection = (bridge, container, isRoot, annotations) => {\n const cursor = value();\n const clearstate = cursor.clear;\n const applySelection = event => {\n cursor.on(start => {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(finish => {\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n const singleCell = boxes[0];\n const isNonEditableCell = getRaw(singleCell) === 'false';\n const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n bridge.selectContents(singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n const mousedown = event => {\n annotations.clear(container);\n findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set);\n };\n const mouseover = event => {\n applySelection(event);\n };\n const mouseup = event => {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate,\n mousedown,\n mouseover,\n mouseup\n };\n };\n\n const down = {\n traverse: nextSibling,\n gather: after$1,\n relative: Situ.before,\n retry: Retries.tryDown,\n failure: BeforeAfter.failedDown\n };\n const up = {\n traverse: prevSibling,\n gather: before,\n relative: Situ.before,\n retry: Retries.tryUp,\n failure: BeforeAfter.failedUp\n };\n\n const isKey = key => {\n return keycode => {\n return keycode === key;\n };\n };\n const isUp = isKey(38);\n const isDown = isKey(40);\n const isNavigation = keycode => {\n return keycode >= 37 && keycode <= 40;\n };\n const ltr = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n const rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n const get$3 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const by = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n const adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt.domRange;\n const relative = adt.relative;\n const exact = adt.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n };\n const availableSearch = (() => {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return Optional.none;\n }\n })();\n const fromPoint = (win, x, y) => {\n const doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const doSetNativeRange = (win, rng) => {\n getNativeSelection(win).each(selection => {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n const doSetRange = (win, start, soffset, finish, foffset) => {\n const rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n ltr: (start, soffset, finish, foffset) => {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: (start, soffset, finish, foffset) => {\n getNativeSelection(win).each(selection => {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n const setExact = (win, start, soffset, finish, foffset) => {\n const relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n const setRelative = (win, startSitu, finishSitu) => {\n const relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const setToElement = (win, element, selectNodeContents$1 = true) => {\n const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n const rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n const clear = win => {\n getNativeSelection(win).each(selection => selection.removeAllRanges());\n };\n\n const WindowBridge = win => {\n const elementFromPoint = (x, y) => {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n const getRect = element => {\n return element.dom.getBoundingClientRect();\n };\n const getRangedRect = (start, soffset, finish, foffset) => {\n const sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n const getSelection = () => {\n return get$2(win).map(exactAdt => {\n return convertToRange(win, exactAdt);\n });\n };\n const fromSitus = situs => {\n const relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n const situsFromPoint = (x, y) => {\n return getAtPoint(win, x, y).map(exact => {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n const clearSelection = () => {\n clear(win);\n };\n const collapseSelection = (toStart = false) => {\n get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n const situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, (start, soffset, finish, foffset) => {\n const node = toStart ? start : finish;\n const offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n }));\n };\n const selectNode = element => {\n setToElement(win, element, false);\n };\n const selectContents = element => {\n setToElement(win, element);\n };\n const setSelection = sel => {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n const setRelativeSelection = (start, finish) => {\n setRelative(win, start, finish);\n };\n const getInnerHeight = () => {\n return win.innerHeight;\n };\n const getScrollY = () => {\n const pos = get$3(SugarElement.fromDom(win.document));\n return pos.top;\n };\n const scrollBy = (x, y) => {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint,\n getRect,\n getRangedRect,\n getSelection,\n fromSitus,\n situsFromPoint,\n clearSelection,\n collapseSelection,\n setSelection,\n setRelativeSelection,\n selectNode,\n selectContents,\n getInnerHeight,\n getScrollY,\n scrollBy\n };\n };\n\n const rc = (rows, cols) => ({\n rows,\n cols\n });\n const mouse = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n const isEditableNode = node => closest$2(node, isHTMLElement).exists(isEditable$1);\n const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish);\n const keyboard = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const clearToNavigate = () => {\n annotations.clear(container);\n return Optional.none();\n };\n const keydown = (event, start, soffset, finish, foffset, direction) => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n if (isNavigation(keycode) && !shiftKey) {\n annotations.clearBeforeUpdate(container);\n }\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, selected => {\n const update$1 = attempts => {\n return () => {\n const navigation = findMap(attempts, delta => {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(() => {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, _ => {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && !shiftKey) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n const keyup = (event, start, soffset, finish, foffset) => {\n return retrieve$1(container, annotations.selectedSelector).fold(() => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n if (!shiftKey) {\n return Optional.none();\n }\n if (isNavigation(keycode) && isEditableSelection(start, finish)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown,\n keyup\n };\n };\n const external = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n return (start, finish) => {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n const read = (element, attr) => {\n const value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$2 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$1 = element => read(element, 'class');\n const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$1(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const remove$1 = (element, classes) => {\n each$2(classes, x => {\n remove$2(element, x);\n });\n };\n\n const addClass = clazz => element => {\n add(element, clazz);\n };\n const removeClasses = classes => element => {\n remove$1(element, classes);\n };\n\n const byClass = ephemera => {\n const addSelectionClass = addClass(ephemera.selected);\n const removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n const clear = container => {\n const sels = descendants(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const byAttr = (ephemera, onSelection, onClear) => {\n const removeSelectionAttributes = element => {\n remove$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n const addSelectionAttribute = element => {\n set$2(element, ephemera.selected, '1');\n };\n const clear = container => {\n clearBeforeUpdate(container);\n onClear();\n };\n const clearBeforeUpdate = container => {\n const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n each$2(sels, removeSelectionAttributes);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const SelectionAnnotation = {\n byClass,\n byAttr\n };\n\n const fold = (subject, onNone, onMultiple, onSingle) => {\n switch (subject.tag) {\n case 'none':\n return onNone();\n case 'single':\n return onSingle(subject.element);\n case 'multiple':\n return onMultiple(subject.elements);\n }\n };\n const none = () => ({ tag: 'none' });\n const multiple = elements => ({\n tag: 'multiple',\n elements\n });\n const single = element => ({\n tag: 'single',\n element\n });\n\n const Selections = (lazyRoot, getStart, selectedSelector) => {\n const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n return { get };\n };\n\n const getUpOrLeftCells = (grid, selectedCells) => {\n const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n const upDetails = toDetailList(upGrid);\n return bind$2(upDetails, detail => {\n const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getDownOrRightCells = (grid, selectedCells) => {\n const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n const downDetails = toDetailList(downGrid);\n return bind$2(downDetails, detail => {\n const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getOtherCells = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.map(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const {rows} = extractGridDetails(grid);\n const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n return {\n upOrLeftCells,\n downOrRightCells\n };\n });\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n const TableCellSelectionHandler = (editor, resizeHandler) => {\n const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n const onSelection = (cells, start, finish) => {\n const tableOpt = table(start);\n tableOpt.each(table => {\n const cloneFormats = getTableCloneElements(editor);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n const selectedCells = getCellsFromSelection(editor);\n const otherCells = getOtherCells(table, { selection: selectedCells }, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n };\n const onClear = () => fireTableSelectionClear(editor);\n const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', _e => {\n const win = editor.getWin();\n const body = getBody(editor);\n const isRoot = getIsRoot(editor);\n const syncSelection = () => {\n const sel = editor.selection;\n const start = SugarElement.fromDom(sel.getStart());\n const end = SugarElement.fromDom(sel.getEnd());\n const shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(() => annotations.clear(body), noop);\n };\n const mouseHandlers = mouse(win, body, isRoot, annotations);\n const keyHandlers = keyboard(win, body, isRoot, annotations);\n const external$1 = external(win, body, isRoot, annotations);\n const hasShiftKey = event => event.raw.shiftKey === true;\n editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n const handleResponse = (event, response) => {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(ns => {\n const relative = SimSelection.relative(ns.start, ns.finish);\n const rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n const keyup = event => {\n const wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n const keydown = event => {\n const wrappedEvent = fromRawEvent(event);\n resizeHandler.hide();\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n handleResponse(wrappedEvent, response);\n });\n resizeHandler.show();\n };\n const isLeftMouse = raw => raw.button === 0;\n const isLeftButtonPressed = raw => {\n if (raw.buttons === undefined) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n const dragStart = _e => {\n mouseHandlers.clearstate();\n };\n const mouseDown = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n const mouseOver = e => {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n const mouseUp = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n const getDoubleTap = () => {\n const lastTarget = Cell(SugarElement.fromDom(body));\n const lastTimeStamp = Cell(0);\n const touchEnd = t => {\n const target = SugarElement.fromDom(t.target);\n if (isTag('td')(target) || isTag('th')(target)) {\n const lT = lastTarget.get();\n const lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd };\n };\n const doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n editor.on('PreInit', () => {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n });\n const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n return map$1(cells, cell => cell.dom);\n }, cell => [cell.dom]);\n return {\n getSelectedCells,\n clearSelectedCells\n };\n };\n\n const Event = fields => {\n let handlers = [];\n const bind = handler => {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n const unbind = handler => {\n handlers = filter$2(handlers, h => {\n return h !== handler;\n });\n };\n const trigger = (...args) => {\n const event = {};\n each$2(fields, (name, i) => {\n event[name] = args[i];\n });\n each$2(handlers, handler => {\n handler(event);\n });\n };\n return {\n bind,\n unbind,\n trigger\n };\n };\n\n const create$1 = typeDefs => {\n const registry = map(typeDefs, event => {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n const trigger = map(typeDefs, event => {\n return event.trigger;\n });\n return {\n registry,\n trigger\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const sort = arr => {\n return arr.slice(0).sort();\n };\n const reqMessage = (required, keys) => {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n const unsuppMessage = unsupported => {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n const validateStrArr = (label, array) => {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each$2(array, a => {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n const invalidTypeMessage = (incorrect, type) => {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n const checkDupes = everything => {\n const sorted = sort(everything);\n const dupe = find$1(sorted, (s, i) => {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(d => {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n const base = (handleUnsupported, required) => {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n const baseWith = (handleUnsupported, required, pred) => {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return obj => {\n const keys$1 = keys(obj);\n const allReqd = forall(required, req => {\n return contains$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n const invalidKeys = filter$2(required, key => {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n const handleExact = (required, keys) => {\n const unsupported = filter$2(keys, key => {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n const exactly = required => base(handleExact, required);\n\n const DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n const DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n const DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n const InDrag = () => {\n let previous = Optional.none();\n const reset = () => {\n previous = Optional.none();\n };\n const update = (mode, nu) => {\n const result = previous.map(old => {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n const onEvent = (event, mode) => {\n const dataOption = mode.extract(event);\n dataOption.each(data => {\n const offset = update(mode, data);\n offset.each(d => {\n events.trigger.move(d);\n });\n });\n };\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent,\n reset,\n events: events.registry\n };\n };\n\n const NoDrag = () => {\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n const Movement = () => {\n const noDragState = NoDrag();\n const inDragState = InDrag();\n let dragState = noDragState;\n const on = () => {\n dragState.reset();\n dragState = inDragState;\n };\n const off = () => {\n dragState.reset();\n dragState = noDragState;\n };\n const onEvent = (event, mode) => {\n dragState.onEvent(event, mode);\n };\n const isOn = () => {\n return dragState === inDragState;\n };\n return {\n on,\n off,\n isOn,\n onEvent,\n events: inDragState.events\n };\n };\n\n const setup = (mutation, mode, settings) => {\n let active = false;\n const events = create$1({\n start: Event([]),\n stop: Event([])\n });\n const movement = Movement();\n const drop = () => {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n const throttledDrop = last(drop, 200);\n const go = parent => {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n const mousemove = event => {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(event => {\n mode.mutate(mutation, event.info);\n });\n const on = () => {\n active = true;\n };\n const off = () => {\n active = false;\n };\n const isActive = () => active;\n const runIfActive = f => {\n return (...args) => {\n if (active) {\n f.apply(null, args);\n }\n };\n };\n const sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n const destroy = () => {\n sink.destroy();\n };\n return {\n element: sink.element,\n go,\n on,\n off,\n isActive,\n destroy,\n events: events.registry\n };\n };\n\n const css = namespace => {\n const dashNamespace = namespace.replace(/\\./g, '-');\n const resolve = str => {\n return dashNamespace + '-' + str;\n };\n return { resolve };\n };\n\n const styles$1 = css('ephox-dragster');\n const resolve$1 = styles$1.resolve;\n\n const Blocker = options => {\n const settings = {\n layerClass: resolve$1('blocker'),\n ...options\n };\n const div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n const element = constant(div);\n const destroy = () => {\n remove$6(div);\n };\n return {\n element,\n destroy\n };\n };\n\n const compare = (old, nu) => {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n const extract = event => {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n const mutate = (mutation, info) => {\n mutation.mutate(info.left, info.top);\n };\n const sink = (dragApi, settings) => {\n const blocker = Blocker(settings);\n const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n const destroy = () => {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n const start = parent => {\n append$1(parent, blocker.element());\n };\n const stop = () => {\n remove$6(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start,\n stop,\n destroy\n });\n };\n var MouseDrag = DragMode({\n compare,\n extract,\n sink,\n mutate\n });\n\n const transform = (mutation, settings = {}) => {\n var _a;\n const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n const styles = css('ephox-snooker');\n const resolve = styles.resolve;\n\n const Mutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n const mutate = (x, y) => {\n events.trigger.drag(x, y);\n };\n return {\n mutate,\n events: events.registry\n };\n };\n\n const BarMutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n let target = Optional.none();\n const delegate = Mutation();\n delegate.events.drag.bind(event => {\n target.each(t => {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n const assign = t => {\n target = Optional.some(t);\n };\n const get = () => {\n return target;\n };\n return {\n assign,\n get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n const col = (column, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n const row = (r, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n const resizeBar = resolve('resizer-bar');\n const resizeRowBar = resolve('resizer-rows');\n const resizeColBar = resolve('resizer-cols');\n const BAR_THICKNESS = 7;\n const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n const resizableColumns = (warehouse, isResizable) => {\n const resizableCols = [];\n range$1(warehouse.grid.columns, index => {\n const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, colIndex => {\n const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n return forall(columnCells, cell => isResizable(cell.element));\n });\n };\n const destroy = wire => {\n const previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$6);\n };\n const drawBar = (wire, positions, create) => {\n const origin = wire.origin();\n each$2(positions, cpOption => {\n cpOption.each(cp => {\n const bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(wire.parent(), bar);\n });\n });\n };\n const refreshCol = (wire, colPositions, position, tableHeight) => {\n drawBar(wire, colPositions, (origin, cp) => {\n const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add(colBar, resizeColBar);\n return colBar;\n });\n };\n const refreshRow = (wire, rowPositions, position, tableWidth) => {\n drawBar(wire, rowPositions, (origin, cp) => {\n const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n const refreshGrid = (warhouse, wire, table, rows, cols) => {\n const position = absolute(table);\n const isResizable = wire.isResizable;\n const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n const refresh = (wire, table) => {\n destroy(wire);\n if (wire.isResizable(table)) {\n const warehouse = Warehouse.fromTable(table);\n const rows$1 = rows(warehouse);\n const cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n const each = (wire, f) => {\n const bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n const hide = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'none');\n });\n };\n const show = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'block');\n });\n };\n const isRowBar = element => {\n return has(element, resizeRowBar);\n };\n const isColBar = element => {\n return has(element, resizeColBar);\n };\n\n const resizeBarDragging = resolve('resizer-bar-dragging');\n const BarManager = wire => {\n const mutation = BarMutation();\n const resizing = transform(mutation, {});\n let hoverTable = Optional.none();\n const getResizer = (element, type) => {\n return Optional.from(get$b(element, type));\n };\n mutation.events.drag.bind(event => {\n getResizer(event.target, 'data-row').each(_dataRow => {\n const currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(_dataCol => {\n const currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n const getDelta = (target, dir) => {\n const newX = getCssValue(target, dir);\n const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(() => {\n mutation.get().each(target => {\n hoverTable.each(table => {\n getResizer(target, 'data-row').each(row => {\n const delta = getDelta(target, 'top');\n remove$7(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(column => {\n const delta = getDelta(target, 'left');\n remove$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n const handler = (target, dir) => {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n const mousedown = bind(wire.parent(), 'mousedown', event => {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n const isRoot = e => {\n return eq$1(e, wire.view());\n };\n const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n const mouseover = bind(wire.view(), 'mouseover', event => {\n findClosestEditableTable(event.target).fold(() => {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, table => {\n if (resizing.isActive()) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n }\n });\n });\n const destroy$1 = () => {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n const refresh$1 = tbl => {\n refresh(wire, tbl);\n };\n const events = create$1({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n const create = (wire, resizing, lazySizing) => {\n const hdirection = height;\n const vdirection = width;\n const manager = BarManager(wire);\n const events = create$1({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'row');\n const delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row, hdirection);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(_event => {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'col');\n const delta = vdirection.delta(event.delta, table);\n const tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n refreshBars: manager.refresh,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n const TableResize = { create };\n\n const only = (element, isResizable) => {\n const parent = isDocument(element) ? documentElement(element) : element;\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const detached = (editable, chrome, isResizable) => {\n const origin = () => absolute(chrome);\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin,\n isResizable\n };\n };\n const body = (editable, chrome, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const ResizeWire = {\n only,\n detached,\n body\n };\n\n const createContainer = () => {\n const container = SugarElement.fromTag('div');\n setAll(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append$1(body$1(), container);\n return container;\n };\n const get = (editor, isResizable) => {\n return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n const remove = (editor, wire) => {\n if (editor.inline) {\n remove$6(wire.parent());\n }\n };\n\n const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n const barResizerPrefix = 'bar-';\n const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n const syncPixels = table => {\n const warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), cell => {\n const computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n const TableResizeHandler = editor => {\n const selectionRng = value();\n const tableResize = value();\n const resizeWire = value();\n let startW;\n let startRawW;\n const lazySizing = table => get$5(editor, table);\n const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n const getNumColumns = table => getGridSize(table).columns;\n const afterCornerResize = (table, origin, width) => {\n const isRightEdgeResize = endsWith(origin, 'e');\n if (startRawW === '') {\n convertToPercentSize(table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n const resizing = lazyResizingBehaviour();\n const tableSize = lazySizing(table);\n const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n const percentW = parseFloat(startRawW.replace('%', ''));\n const targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncPixels(table);\n }\n };\n const destroy = () => {\n tableResize.on(sz => {\n sz.destroy();\n });\n resizeWire.on(w => {\n remove(editor, w);\n });\n };\n editor.on('init', () => {\n const rawWire = get(editor, isResizable);\n resizeWire.set(rawWire);\n if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n const resizing = lazyResizingBehaviour();\n const sz = TableResize.create(rawWire, resizing, lazySizing);\n sz.on();\n sz.events.startDrag.bind(_event => {\n selectionRng.set(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(event => {\n const rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(event => {\n const table = event.table;\n const rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.on(rng => {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n tableResize.set(sz);\n }\n });\n editor.on('ObjectResizeStart', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n convertToPixelSize(table);\n } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n convertToPercentSize(table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n convertToPercentSize(table);\n }\n startW = e.width;\n startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n const origin = e.origin;\n if (startsWith(origin, 'corner-')) {\n afterCornerResize(table, origin, e.width);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n editor.on('SwitchMode', () => {\n tableResize.on(resize => {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n editor.on('dragstart dragend', e => {\n tableResize.on(resize => {\n if (e.type === 'dragstart') {\n resize.hideBars();\n resize.off();\n } else {\n resize.on();\n resize.showBars();\n }\n });\n });\n editor.on('remove', () => {\n destroy();\n });\n const refresh = table => {\n tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n };\n const hide = () => {\n tableResize.on(resize => resize.hideBars());\n };\n const show = () => {\n tableResize.on(resize => resize.showBars());\n };\n return {\n refresh,\n hide,\n show\n };\n };\n\n const setupTable = editor => {\n register(editor);\n const resizeHandler = TableResizeHandler(editor);\n const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n registerCommands(editor, actions);\n registerQueryCommands(editor, actions);\n registerEvents(editor, actions);\n return {\n getSelectedCells: cellSelectionHandler.getSelectedCells,\n clearSelectedCells: cellSelectionHandler.clearSelectedCells\n };\n };\n\n const DomModel = editor => {\n const table = setupTable(editor);\n return { table };\n };\n var Model = () => {\n global$1.add('dom', DomModel);\n };\n\n Model();\n\n})();\n"],"names":["global$1","tinymce","util","Tools","resolve","isType$1","type","value","x","t","Array","isArray","o","v","proto","constructor","String","prototype","isPrototypeOf","_a","name","typeOf","isSimpleType","eq$2","a","isString","isObject","isNull","isBoolean","isUndefined","undefined","isNonNullable","isNullable","isFunction","isNumber","noop","constant","identity","tripleEquals","b","curry","fn","initialArgs","restArgs","all","concat","apply","not","f","never","always","Optional","tag","this","some","none","singletonNone","fold","onNone","onSome","isSome","isNone","map","mapper","bind","binder","exists","predicate","forall","filter","getOr","replacement","or","getOrThunk","thunk","orThunk","getOrDie","message","Error","from","getOrNull","getOrUndefined","each","worker","toArray","toString","nativeSlice","slice","nativeIndexOf","indexOf","nativePush","push","contains$2","xs","rawIndexOf","ts","call","pred","i","len","length","range$1","num","r","map$1","each$2","partition","pass","fail","filter$2","foldr","acc","eachr","foldl","find$1","until","findUntil","findIndex","flatten","bind$2","mapToObject","get$d","head","last$2","findMap","arr","keys","Object","hasOwnProperty","each$1","obj","props","k","tupleMap","tuple","filter$1","onTrue","onFalse","internalFilter","objAcc","mapToArray","values","has$1","key","Global","window","Function","resolve$2","p","scope","parts","path","split","actual","unsafe","getPrototypeOf","sandHTMLElement","test","element","dom","nodeName","toLowerCase","nodeType","isType","isComment","isHTMLElement","isElement","isText","isDocument","isDocumentFragment","isTag","e","rawSet","console","error","setAttribute","set$2","setAll$1","attrs","get$b","getAttribute","getOpt","remove$7","removeAttribute","clone$2","attributes","attr","fromDom$1","node","SugarElement","fromHtml","html","div","document","createElement","innerHTML","hasChildNodes","childNodes","fromTag","fromText","text","createTextNode","fromDom","fromPoint","docElm","y","elementFromPoint","is$2","selector","elem","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","one","base","querySelector","eq$1","e1","e2","contains$1","d1","d2","contains","is$1","owner","ownerDocument","documentOrOwner","dos","parent","parentNode","parentElement","parents","isRoot","stop","ret","rawParent","prevSibling","previousSibling","nextSibling","children$2","child$2","index","cs","before$3","marker","insertBefore","after$5","append$1","prepend","firstChild$1","firstChild","appendChild","wrap","wrapper","after$4","elements","append","empty","textContent","rogue","remove$6","removeChild","unwrap","children","clone$1","original","isDeep","cloneNode","shallow","deep","shallowAs","nu","validSectionList","detail","rowspan","colspan","rowdetail","cells","section","elementnew","isNew","isLocked","rowcells","supported","Element","attachShadow","Node","getRootNode","isSupported$1","getShadowRoot","host","getShadowHost","isOpenShadowHost","shadowRoot","inBody","doc","body","fbc","fab","getBody$1","descendants$1","result","ancestors$3","ancestors$4","children$1","descendants","querySelectorAll","all$1","ClosestOrAncestor","is","ancestor","ancestor$2","el","closest$2","s","ancestor$1","child","child$1","descendant","closest$1","lhs","rhs","comparator","left","cat","someIf","checkRange","str","substr","start","end","idx","startsWith","prefix","endsWith","suffix","trim","replace","blank","isNotEmpty","isSupported","style","getPropertyValue","internalSet","property","setProperty","set$1","setAll","css","get$a","getComputedStyle","getUnsafeProperty","getRaw$2","raw","remove$5","removeProperty","internalRemove","getAttrValue","cell","fallback","parseInt","getSpan","hasColspan","cellOrCol","hasRowspan","getCssValue","minWidth","minHeight","firstLayer","filterFirstLayer","tags","join","elm","lookup","cells$1","columns$1","columnGroups","columnGroup","table","rows$1","fromRowsOrColGroups","elems","getSection","row","column","getParentSection","group","parentName","isValidSection","fromTable$1","rows","cached","called","args","unknown$2","nu$2","major","minor","Version","detect","versionRegexes","agent","cleanedAgent","regexes","firstMatch","Number","find","unknown","detect$4","candidates","userAgent","candidate","search","normalVersionRegex","checkContains","target","uastring","browsers","brand","oses","PlatformInfo","edge","chromium","opera","firefox","safari","nu$1","info","current","version","isBrowser","isEdge","isChromium","isIE","isOpera","isFirefox","isSafari","Browser","ie","windows","android","linux","macos","solaris","freebsd","chromeos","isOS","isWindows","isiOS","isAndroid","isMacOS","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","ios","PlatformDetection","userAgentDataOpt","mediaMatch","browser","userAgentData","brands","uaBrand","lcBrand","detectBrowser$1","detectBrowser","os","detectOs","deviceType","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","isWebView","DeviceType","query","matchMedia","platform","navigator","detect$2","Dimension","getOffset","get","parseFloat","aggregate","properties","val","isNaN","set","h","match","getOuter","max","cumulativeInclusions","toNumber","px","toFloat","getProp","getCalculatedWidth","boxSizing","width","getBoundingClientRect","offsetWidth","size","upper","lower","calcContentBoxSize","api$2","get$9","getOuter$2","getInner","getRuntime$1","addCells","gridRow","existingCells","before","after","newCells","setCells","addCell","mutateCell","getCell","getCellElement","cellLength","extractGridDetails","grid","cols","clone","cloneRow","cloneCell","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","locked","lockedArr","_val","copy","sort","sort$1","filterItems","warehouse","generate$1","list","access","lockedColumns","rowData","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","hasNonNullableKey","extended","occupiedColumnPosition","occupiedRowPosition","columnPosition","newpos","Math","columns","colgroups","columnsGroup","columnIndex","colIndex","columnext","generateColumns","colgroup$1","colgroup","grid$1","Warehouse","fromTable","generate","getAt","findItem","item","filtered","justCells","w","justColumns","hasColumns","getColumnAt","isValidCell","rowsArr","col","decide","getBlock","isValid","getFallback","inBlock","c","deduce","rest","reverse","aa","delta","next","n","extras","abs","onDirection","isLtr","isRtl","getDirection","api$1","height","offsetHeight","get$8","getOuter$1","getRuntime","top","translate","SugarPosition","firstDefinedOrZero","absolute","win","defaultView","documentElement","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport","box","boxPosition","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop$1","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","array","lines","cellOption","lastLine","positions","optElements","detect$1","step","amount","units","unsupportedLength","fixed","relative","pattern","decimalDigits","exponentPart","opt","input","unsignedDecimalLiteral","RegExp","parse","accepted","exec","unitRaw","unit","check","isUnit","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","setHeight","normalizePixelSize","getter","setter","number","newSize","total","floor","convert","getTotalHeight","getHeightValue","getRaw$1","prop","getRawWidth$1","getPercentageWidth","getPixelWidth$1","getHeight","get$7","setGenericWidth","getPercentTableWidth","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","getDimension","cellOpt","backups","getWidthFrom","getWidth","columnCells","justCols","pos","colFilter","supportsColWidths","isValidColumn","getDeduced","deduced","d","getPixelWidths","tableSize","minCellWidth","getHeightFrom","direction","widthLookup","noneSize","zero","pixelWidth","getWidths","getCellDelta","singleColumnWidth","setElementWidth","adjustTableWidth","isRelative","label","percentageSize","getFloatWidth","cellWidth","getPercentageWidths","_delta","currentWidth","pixelSize","newWidth","TableSize","chooseSize","makeCell","seenSelected","rowIndex","td","extract$1","selectedSelector","isSelected","replica","replicaHouse","replicaStats","house","totalColumns","minRow","minCol","maxRow","maxCol","allCells","selectedCells","startRow","endRow","startCol","endCol","statsStruct","findSelectedStats","unselectedCells","stats","totalRows","j","fillInGaps","widthDelta","colWidths","allColsWidth","selectedColsWidth","getTableWidthDelta","emptyRows","clean","api","getOption","nodeValue","NodeValue","get$6","getEnd","elementsWithCursorPosition","isCursorPosition","isContentEditableFalse","first","descend","res","descendant$1","last$1","descendantRtl","transferableAttributes","createCell","createCol","createColgroup","createRow$1","replace$1","cloneChildren","copy$2","pasteReplace","cellOperations","mutate","formatsToClone","cloneCss","prev","source","sourceDom","targetDom","cssText","copy$1","formats","lastNode","oldCell","newCell","firstText","formatSelector","last","clonedFormat","cloneFormats","validAttributes","attributeName","attribute","cloneAppropriateAttributes","colGap","gap","paste$1","option","editor","options","defaultWidth","getPixelForcedWidth","parentBlock","getParent","selection","getStart","isBlock","getBody","getTableCloneElements","getTableHeaderType","getTableColumnResizingBehaviour","isPreserveTableColumnResizing","isResizeTableColumnResizing","getTableSizingMode","isTablePercentagesForced","isTablePixelsForced","isTableResponsiveForced","hasTableResizeBars","shouldStyleWithCss","shouldMergeContentOnPaste","getTableDefaultAttributes","defaultAttributes","isSet","determineDefaultTableAttributes","getTableDefaultStyles","defaultStyles","determineDefaultTableStyles","tableUseColumnGroup","closest","isEditable$1","assumeEditable","isContentEditable","editable","getRaw","contentEditable","getIsRoot","removeDataStyle","removeStyleAttribute","getSelectionStart","getPixelWidth","getPixelHeight","isInEditableContext$1","inSelection","bounds","leftEdge","rightEdge","topEdge","bottomEdge","finishCol","finishRow","isWithin","getAnyBox","startCell","finishCell","startCoords","finishCoords","sc","fc","detailA","detailB","min","getBox$1","isRect","detailIsWithin","isRectangular","intercepts$1","finish","inside","parentCell","innerCell","c1","c2","moveBy","deltaRow","deltaColumn","moveBy$1","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","TagBoundaries","DomUniverse","up","down","styles","remove","copyTo","destination","as","insert","afterAll","appendAll","create","comparePosition","other","compareDocumentPosition","isSpecial","getLanguage","getText","setText","isBoundary","isEmptyTag","isNonEditable","eq","unsafeOne","universe","look","tail","commonElement","sharedOne$1","ancestors$1","ps1","ps2","prune","ind","pruned1","pruned2","shared","firstpath","secondpath","universe$3","sharedOne","_universe","lookupTable","container","identify","rootTable","boxes","startTable","finishTable","ancestorCells","ancestors","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","getEdges","firstSelectedSelector","lastSelectedSelector","shiftSelection","getLast","identified","expandTo","retrieve","retrieveBox","edges","sectionSelector","firstAncestor","lastAncestor","fA","lA","getBox","unmergable","hasSpan","span","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","selected","firstSelected","lastSelected","forMenu","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","nodes","model","getSelectedCells","registerEvents","actions","on","multiCellContext","preventDefault","extractSelected","content","format","innerText","getTextContent","serializer","serialize","serializeElements","getCellsFromFakeSelection","paste","isTable","getDoc","generators","targets","clipboard","pasteCells","focus","point","offset","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","halve","main","getGenericWidth","surround","sizes","startIndex","endIndex","results","clampDeltaHelper","minCellSize","diff","clampNegativeDelta","clampDelta","resizeTable","calcRelativeDeltas","ratio","newThis","calcLeftEdgeDeltas","clampedDelta","calcFixedDeltas","resizer","clampTableDelta","calcMiddleDeltas","_prev","calcRightEdgeDeltas","calcRedestributedWidths","totalWidth","pixelDelta","newSizes","preserveTable","isLastColumn","maxDelta","_index","_minCellSize","_totalWidth","_pixelDelta","_isRelative","getGridSize","isHeaderCell","isHeaderCells","getRowHeaderType","isHeaderRow","getRowType","findCommonCellType","subType","headerCells","transformCell","substitution","transformRow","fixedCell","mutate$1","sectionCells","TableSection","rowType","findTableRowHeaderType","setIfNot","ignore","insert$1","render$1","newRows","syncRows","gridSection","tr","syncColGroup","colGroup","renderSection","sectionName","newSection","generateSection","sectionElems","renderOrRemoveSection","removeSection","headSection","bodySection","footSection","columnGroupsSection","findDiff","comp","subgrid","getRow","isColRow","getColumn","toDetails","seen","details","updateSeen","rowdetailnew","toGrid","colgroupCols","rowCells","rowDetail","toDetailList","findInWarehouse","extractCells","cell$1","lc","run","operation","extract","adjustment","postAction","genWrappers","behaviours","tableSection","output","fromWarehouse","cursor","out","newElements","tableSizing","sizing","resizing","resize","onPasteByEditor","onCells","onUnlockedCells","allUnlocked","isUnlockedTableCell","unmerge","currentCell","isToReplace","splitRows","uniqueCells","sub","value$1","applyHelper","constHelper","outputHelper","inner","_onError","onValue","isValue","isError","Result","mapError","toOptional","onError","_onValue","msg","fromOption","optional","err","measureWidth","gridA","gridB","rowDelta","colDelta","measureHeight","generateElements","generator","rowFill","exampleRow","colFill","newChildren","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","getLockedColumnsWithinBounds","startAddress","colNum","merge$1","validStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getValidStartAddress","gridBRows","lockedColumnsWithinBounds","rowRemainder","colRemainder","colRequired","rowRequired","measure","fittedGrid","newLockedColumnsWithinBounds","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","mergeTables","insertCols","prevCell","substitute","splitCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","newChild","lockedColFill","insertRowAt","example","newRow","ex","insertColumnAt","withinSpan","getElementFor","isDuplicatedCell","notInStartRow","notInStartColumn","determineScope","applyScope","newScope","isInHeader","getScope","replaceIn","replacer","genScope","shouldReplace","mapCells","isTarget","getColumnCells","replaceColumns","indexes","rowHeaders","shouldReplaceCell","targetColumn","_colIndex","columnReplacePredicate","scopeGenerator","columnScopeGenerator","replaceRows","targetRow","getRowCells","columnHeaders","_cell","newGrid","_rowIndex","rowReplacerPredicate","rowScopeGenerator","replaceCells","targetCells","Adt","cases","constructors","adt","acase","count","keys$1","argLength","foldArgs","branches","branchKeys","reqKey","log","params","ColumnContext","only","middle","right","determine","context","neighbours","measures","recalculateHeightForCells","heights","recalculate","widths","groups","recalculateWidthForColumns","recalculateWidthForCells","recalculateAndApply","adjustWidth","clampedStep","deltas","newWidths","dx","adjustHeight","getPixelHeights","newHeights","dy","newCellSizes","newRowSizes","matchRowHeight","uniqueColumns","currentDetail","isCol","isColgroup","isRow$1","elementToData","getScopeAttribute","Generators","toData","add","data","nuCell","recent","getOrInit","makeNew","replaceOrInit","merge","stringAttributes","baseScope","scopes","getScopeProperty","blockList","universe$1","tagName","isBlock$1","isList","isList$1","isEmptyTag$1","isBr","markCell","rightSiblingIsBlock","rightSibling","isListItem","contents","advancedBr","markContent","isEditable","outcome","elementFromGrid","_b","findEditableCursorPosition","bundle","cursorElement","uniqueRows","makeRowsSection","initialGrid","rowIndexes","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","gridifyRows","pasteDetails","fromPastedRows","wh","_table","_info","adjustWidthTo","adjustAndRedistributeWidths","resizeBehaviour","tablePixelWidth","adjustAndRedistributeWidths$1","firstColumnIsLocked","_warehouse","lastColumnIsLocked","getColumnsWidth","uniqueCols","insertColumnsExtractor","pasteColumnsExtractor","headerCellGenerator","bodyCellGenerator","insertRowsBefore","targetIndex","insertRowsAfter","newG","insertColumnsBefore","extractDetail","insertColumnsAfter","eraseColumns","_comparator","_genWrappers","deleteColumnsAt","maxColIndex","eraseRows","deleteRowsAt","maxRowIndex","makeColumnsHeader","columnIndexes","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","merge$2","onMergable","mergeable","unmergeCells","onUnmergable","gridify","address","pasteColsBefore","mergedGrid","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","getCellsType","getRowsType","minRowRange","maxRowRange","rowTypes","hasHeader","hasFooter","hasBody","findCommonRowType","fireNewRow","dispatch","fireNewCell","fireTableModified","styleModified","structure","structureModified","styleAndStructureModified","get$5","TableActions","resizeHandler","cellSelectionHandler","isTableBody","colMutationOp","getTableSectionType","setSelectionFromAction","firstCell","clearSelectedCells","rng","createRng","selectNode","setRng","des","setStart","setEnd","execute","guard","effect","noEvents","refresh","range","deleteRow","deleteColumn","getTableRowType","getTableCellType","getTableColType","constrainSpan","currentColspan","isColInRange","copyCols","fakeColGroups","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateColGroup","fakeRows","cellsToCopy","copiedCells","clonedCell","fakeTR","generateRows","copyRows","slicedGrid","filteredGrid","slicedDetails","adt$5","invalid","pixels","percent","validateFor","rawAmount","substring","Size","redistributeValues","newWidthType","newTotalWidth","scale","pc","redistributeToPx","_pc","redistributeToPercent","redistribute$1","newType","floats","redistributeEmpty","normalize","sum","add$3","scan","remainder","floored","roundDown","round","validate","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","getRawWidths","nuWidths","redistributeToColumns","redistributeToW","newHeight","hUnit","totalHeight","oldHeights","getRawHeights","redistributeToH","isPercentSizing","isPixelSizing","isNoneSizing","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","getPixelTableWidth","convertToNoneSize","rowElements","DefaultRenderOptions","border","colGroups","createGroupRow","createRows","createRow","placeCaretInCell","select","collapse","colHeaders","undoManager","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRows","tbody","tbodyRows","render","get$4","insertContent","addVisual","isPercentage","fireEvents","tableElm","selectFirstCellInTable","global","tableTypeBase","tableTypeRow","tableTypeColumn","setData","items","fakeClipboardItem","FakeClipboardItem","write","getData","read","getType","clearData","clear","setRows","rowsOpt","clearRows","getRows","setColumns","columnsOpt","clearColumns","getColumns","getSelectionStartCellOrCaption","registerCommands","getTableFromCell","performActionOnSelection","action","getSelectionStartCell","postExecute","_data","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","pasteRows","actOnType","getAction","_ui","get$c","no_events","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutCol","mceTableCutRow","mceTableCopyCol","mceTableCopyRow","mceTablePasteColBefore","mceTablePasteColAfter","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","cellOrCaption","isEmpty","setContent","setCursorLocation","nodeChanged","mceTableCellToggleClass","clazz","allHaveClass","formatter","formatterAction","mceTableToggleClass","toggle","mceTableToggleCaption","caption","appendAt","mceTableSizingMode","setSizingMode","mceTableCellType","mceTableColType","mceTableRowType","func","addCommand","checkInput","headerRows","headerColumns","insertTable","getFormatName","validArgs","has","formatName","adt$4","Situ","cata","subject","onBefore","onOn","onAfter","situ","Response","kill","createRange","selectNodeContents","selectNodeContentsUsing","relativeToNative","startSitu","finishSitu","setStartBefore","setStartAfter","setEndBefore","setEndAfter","setFinish","exactToNative","soffset","foffset","toRect","rect","bottom","adt$3","ltr","rtl","fromRange","startContainer","startOffset","endContainer","endOffset","diagnose","ranges","domRange","exact","getRanges","collapsed","rev","doDiagnose","asLtrRange","SimRange","Situs","convertToRange","makeSitus","selectRange","cellSel","traverse","mode","backtrack","_direction","transition","sidestep","advance","sibling","successors","go","rules","succ","rule","fb","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","before$1","after$1","after$2","adt$2","success","failedUp","failedDown","isRow","BeforeAfter","verify","bridge","beforeOffset","afterOffset","failure","afterCell","beforeCell","beforeBounds","getRect","afterBounds","isOverlapping","_sharedRow","onSuccess","onFailedUp","onFailedDown","gatherer","cand","gather","handleParent","findBr","br","adjacent","inParent","indexInParent","tryBr","handleBr","tgt","moveDown","caret","moveUp","xDelta","yDelta","toCaret","getElemBox","getBoxAt","getRangedRect","getPartialBox","getEntireBox","adt$1","retry","inOutsideBlock","isOutside","downMovement","adjuster","guessBox","lowerCaret","move","adjustTil","movement","numRetries","isAtTable","adjustForTable","situsFromPoint","guess","newCaret","moved","adjusted","getInnerHeight","checkScroll","scrollBy","Retries","tryUp","higherCaret","tryDown","getJumpSize","findSpot","getSelection","sel","brNeighbour","fromSitus","analysis","_message","process","tryCursor","situs","tryAgain","tryAt","inSameTable","simulate","initial","anchor","spot","handle$1","navigate","precheck","firstUpCheck","seekLeft","lastOffset","lastDownCheck","seekRight","Cell","doRevoke","revoke","singleton","findCell","isInEditableContext","isKey","keycode","isUp","isDown","isNavigation","isBackward","isForward","SimSelection","exactFromRange","simRange","getWin","_finishSitu","_soffset","_finish","_foffset","caretPositionFromPoint","offsetNode","caretRangeFromPoint","availableSearch","beforeSpecial","name$1","makeRange","same","getNativeSelection","doSetNativeRange","removeAllRanges","addRange","doSetRange","setRangeFromRelative","setBaseAndExtent","extend","setLegacyRtlRange","setExact","preprocessExact","setRelative","preprocessRelative","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","setToElement","selectNodeContents$1","get$2","getExact","getFirstRect","rects","getClientRects","getFirstRect$1","getAtPoint","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","selectContents","innerHeight","getScrollY","_DOC","get$3","by","rc","mouse","annotations","handlers","clearstate","applySelection","event","clearBeforeUpdate","singleCell","isNonEditableCell","isCellClosestContentEditable","mousedown","mouseover","mouseup","MouseSelection","isEditableNode","isEditableSelection","keyboard","clearToNavigate","keydown","realEvent","which","shiftKey","handler","update$1","attempts","navigation","newSels","update","_","keyup","sync","supports","classList","add$1","id","add$2","SelectionAnnotation","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","multiple","single","getOtherCells","upOrLeftCells","upGrid","upDetails","slicedCells","getUpOrLeftCells","downOrRightCells","downGrid","downDetails","getDownOrRightCells","fromRawEvent$1","rawEvent","composed","composedPath","getOriginalEventTarget","stopPropagation","prevent","fa","mkEvent","clientX","clientY","useCapture","wrapped","handle","addEventListener","unbind","removeEventListener","bind$1","fromRawEvent","hasInternalTarget","TableCellSelectionHandler","cellSelection","lazyRoot","Selections","otherCells","fireTableSelectionChange","fireTableSelectionClear","_e","mouseHandlers","keyHandlers","external$1","external","handleResponse","response","hasShiftKey","ns","isLeftMouse","button","doubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","getDoubleTap","buttons","wrappedEvent","getRng","hide","show","addTempAttr","onMultiple","onSingle","Event","fields","trigger","create$1","typeDefs","registry","baseWith","handleUnsupported","required","validateStrArr","everything","sorted","checkDupes","req","reqMessage","invalidKeys","incorrect","invalidTypeMessage","handleExact","unsupported","unsuppMessage","exactly","DragMode","DragSink","DragApi","InDrag","previous","events","onEvent","old","compare","reset","Movement","noDragState","NoDrag","inDragState","dragState","off","isOn","setup","mutation","settings","active","drop","sink","throttledDrop","rate","timer","cancel","clearTimeout","throttle","setTimeout","runIfActive","forceDrop","delayDrop","isActive","destroy","namespace","dashNamespace","resolve$1","MouseDrag","dragApi","blocker","layerClass","position","Blocker","mdown","mup","mmove","mout","BarMutation","drag","delegate","Mutation","assign","resizeBar","resizeRowBar","resizeColBar","wire","drawBar","origin","cpOption","cp","bar","refreshCol","colPositions","tableHeight","colBar","role","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","warhouse","isResizable","resizableRowBars","resizableRows","resizableRowPositions","_pos","barIndex","resizableColBars","resizableCols","colElmOpt","resizableColumns","resizableColPositions","bars","resizeBarDragging","BarManager","transform","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","dir","startAdjust","isColBar","view","tbl","hideBars","showBars","TableResize","lazySizing","hdirection","vdirection","manager","beforeResize","afterResize","startDrag","_event","refreshBars","ResizeWire","chrome","createContainer","padding","margin","barResizerPrefix","TableResizeHandler","selectionRng","tableResize","resizeWire","startW","startRawW","lazyResizingBehaviour","afterCornerResize","isRightEdgeResize","getNumColumns","isPercentage$1","percentW","isPixel","computedWidth","syncPixels","sz","inline","rawWire","objectResizing","hasTableObjectResizing","rawTable","fireObjectResizeStart","fireObjectResized","targetElm","addClass","getStyle","getAttrib","getRawWidth","isReadOnly","setupTable","registerOption","register","processor","default","valid","lookupOnSelection","addQueryValueHandler","registerQueryCommands","DomModel"],"mappings":"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"}