@aquera/nile-elements 1.3.4-beta-1 → 1.3.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 (450) hide show
  1. package/README.md +3 -0
  2. package/demo/index.html +27 -20
  3. package/dist/{fixture-54600b35.cjs.js → fixture-1c49c014.cjs.js} +2 -2
  4. package/dist/{fixture-73855806.cjs.js.map → fixture-1c49c014.cjs.js.map} +1 -1
  5. package/dist/{fixture-9871e8a9.esm.js → fixture-985bba12.esm.js} +1 -1
  6. package/dist/index.js +3 -2
  7. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  8. package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
  9. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  10. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  11. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  12. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  13. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  14. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  15. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  16. package/dist/nile-button/nile-button.test.esm.js +1 -1
  17. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  18. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  19. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  20. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  21. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  22. package/dist/nile-card/nile-card.test.esm.js +1 -1
  23. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  24. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  25. package/dist/nile-chip/nile-chip.cjs.js +1 -1
  26. package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
  27. package/dist/nile-chip/nile-chip.esm.js +3 -2
  28. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  29. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  30. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  31. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  32. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  33. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  34. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  35. package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
  36. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  37. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  38. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  39. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  40. package/dist/nile-file-preview/nile-file-preview.test.cjs.js +1 -1
  41. package/dist/nile-file-preview/nile-file-preview.test.esm.js +1 -1
  42. package/dist/nile-file-upload/nile-file-upload.test.cjs.js +1 -1
  43. package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -1
  44. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
  45. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
  46. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  47. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  48. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  49. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  50. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  51. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  52. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  53. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  54. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  55. package/dist/nile-input/nile-input.test.esm.js +1 -1
  56. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  57. package/dist/nile-link/nile-link.test.esm.js +1 -1
  58. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  59. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  60. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  61. package/dist/nile-popover/nile-popover.test.esm.js +1 -1
  62. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  63. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  64. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  65. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  66. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  67. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  68. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  69. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  70. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  71. package/dist/nile-select/nile-select.test.esm.js +1 -1
  72. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  73. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  74. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  75. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  76. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  77. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  78. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +1 -1
  79. package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +1 -1
  80. package/dist/src/nile-chip/nile-chip.js +8 -0
  81. package/dist/src/nile-chip/nile-chip.js.map +1 -1
  82. package/dist/src/version.js +1 -1
  83. package/dist/src/version.js.map +1 -1
  84. package/dist/tsconfig.tsbuildinfo +1 -1
  85. package/package.json +1 -1
  86. package/src/nile-chip/nile-chip.ts +9 -0
  87. package/dist/fixture-54600b35.cjs.js.map +0 -1
  88. package/dist/fixture-5b79f853.cjs.js +0 -395
  89. package/dist/fixture-5b79f853.cjs.js.map +0 -1
  90. package/dist/fixture-73855806.cjs.js +0 -395
  91. package/dist/fixture-90b199c4.esm.js +0 -569
  92. package/dist/fixture-c1d78368.cjs.js +0 -395
  93. package/dist/fixture-c1d78368.cjs.js.map +0 -1
  94. package/dist/fixture-cf7bfcf5.esm.js +0 -569
  95. package/dist/fixture-dbd66009.cjs.js +0 -395
  96. package/dist/fixture-dbd66009.cjs.js.map +0 -1
  97. package/dist/nile-code-editor/backup_nile-code-editor copy.cjs.js +0 -2
  98. package/dist/nile-code-editor/backup_nile-code-editor copy.cjs.js.map +0 -1
  99. package/dist/nile-code-editor/backup_nile-code-editor copy.esm.js +0 -1
  100. package/dist/nile-grid/nile-grid.types.cjs.js +0 -2
  101. package/dist/nile-grid/nile-grid.types.cjs.js.map +0 -1
  102. package/dist/nile-grid/nile-grid.types.esm.js +0 -1
  103. package/dist/nile-grid-body/index.cjs.js +0 -2
  104. package/dist/nile-grid-body/index.cjs.js.map +0 -1
  105. package/dist/nile-grid-body/index.esm.js +0 -1
  106. package/dist/nile-grid-body/nile-grid-body.cjs.js +0 -2
  107. package/dist/nile-grid-body/nile-grid-body.cjs.js.map +0 -1
  108. package/dist/nile-grid-body/nile-grid-body.css.cjs.js +0 -2
  109. package/dist/nile-grid-body/nile-grid-body.css.cjs.js.map +0 -1
  110. package/dist/nile-grid-body/nile-grid-body.css.esm.js +0 -10
  111. package/dist/nile-grid-body/nile-grid-body.esm.js +0 -5
  112. package/dist/nile-grid-cell-item/index.cjs.js +0 -2
  113. package/dist/nile-grid-cell-item/index.cjs.js.map +0 -1
  114. package/dist/nile-grid-cell-item/index.esm.js +0 -1
  115. package/dist/nile-grid-cell-item/nile-grid-cell-item.cjs.js +0 -2
  116. package/dist/nile-grid-cell-item/nile-grid-cell-item.cjs.js.map +0 -1
  117. package/dist/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js +0 -2
  118. package/dist/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js.map +0 -1
  119. package/dist/nile-grid-cell-item/nile-grid-cell-item.css.esm.js +0 -35
  120. package/dist/nile-grid-cell-item/nile-grid-cell-item.esm.js +0 -12
  121. package/dist/nile-grid-cell-item/nile-grid-cell-item.utils.cjs.js +0 -2
  122. package/dist/nile-grid-cell-item/nile-grid-cell-item.utils.cjs.js.map +0 -1
  123. package/dist/nile-grid-cell-item/nile-grid-cell-item.utils.esm.js +0 -1
  124. package/dist/nile-grid-head/index.cjs.js +0 -2
  125. package/dist/nile-grid-head/index.cjs.js.map +0 -1
  126. package/dist/nile-grid-head/index.esm.js +0 -1
  127. package/dist/nile-grid-head/nile-grid-head.cjs.js +0 -2
  128. package/dist/nile-grid-head/nile-grid-head.cjs.js.map +0 -1
  129. package/dist/nile-grid-head/nile-grid-head.css.cjs.js +0 -2
  130. package/dist/nile-grid-head/nile-grid-head.css.cjs.js.map +0 -1
  131. package/dist/nile-grid-head/nile-grid-head.css.esm.js +0 -7
  132. package/dist/nile-grid-head/nile-grid-head.esm.js +0 -5
  133. package/dist/nile-grid-head-item/index.cjs.js +0 -2
  134. package/dist/nile-grid-head-item/index.cjs.js.map +0 -1
  135. package/dist/nile-grid-head-item/index.esm.js +0 -1
  136. package/dist/nile-grid-head-item/nile-grid-head-item.cjs.js +0 -2
  137. package/dist/nile-grid-head-item/nile-grid-head-item.cjs.js.map +0 -1
  138. package/dist/nile-grid-head-item/nile-grid-head-item.css.cjs.js +0 -2
  139. package/dist/nile-grid-head-item/nile-grid-head-item.css.cjs.js.map +0 -1
  140. package/dist/nile-grid-head-item/nile-grid-head-item.css.esm.js +0 -34
  141. package/dist/nile-grid-head-item/nile-grid-head-item.esm.js +0 -12
  142. package/dist/nile-grid-head-item/nile-grid-head-item.utils.cjs.js +0 -2
  143. package/dist/nile-grid-head-item/nile-grid-head-item.utils.cjs.js.map +0 -1
  144. package/dist/nile-grid-head-item/nile-grid-head-item.utils.esm.js +0 -1
  145. package/dist/nile-grid-row/index.cjs.js +0 -2
  146. package/dist/nile-grid-row/index.cjs.js.map +0 -1
  147. package/dist/nile-grid-row/index.esm.js +0 -1
  148. package/dist/nile-grid-row/nile-grid-row.cjs.js +0 -2
  149. package/dist/nile-grid-row/nile-grid-row.cjs.js.map +0 -1
  150. package/dist/nile-grid-row/nile-grid-row.css.cjs.js +0 -2
  151. package/dist/nile-grid-row/nile-grid-row.css.cjs.js.map +0 -1
  152. package/dist/nile-grid-row/nile-grid-row.css.esm.js +0 -15
  153. package/dist/nile-grid-row/nile-grid-row.esm.js +0 -7
  154. package/dist/nile-rich-text-editor/utils.cjs.js +0 -2
  155. package/dist/nile-rich-text-editor/utils.cjs.js.map +0 -1
  156. package/dist/nile-rich-text-editor/utils.esm.js +0 -1
  157. package/dist/nile-sidebar/index.cjs.js +0 -2
  158. package/dist/nile-sidebar/index.cjs.js.map +0 -1
  159. package/dist/nile-sidebar/index.esm.js +0 -75
  160. package/dist/nile-sidebar-menu/index.cjs.js +0 -2
  161. package/dist/nile-sidebar-menu/index.cjs.js.map +0 -1
  162. package/dist/nile-sidebar-menu/index.esm.js +0 -1
  163. package/dist/nile-sidebar-menu/nile-sidebar-menu.cjs.js +0 -2
  164. package/dist/nile-sidebar-menu/nile-sidebar-menu.cjs.js.map +0 -1
  165. package/dist/nile-sidebar-menu/nile-sidebar-menu.css.cjs.js +0 -2
  166. package/dist/nile-sidebar-menu/nile-sidebar-menu.css.cjs.js.map +0 -1
  167. package/dist/nile-sidebar-menu/nile-sidebar-menu.css.esm.js +0 -38
  168. package/dist/nile-sidebar-menu/nile-sidebar-menu.esm.js +0 -10
  169. package/dist/nile-sidebar-menu-items/index.cjs.js +0 -2
  170. package/dist/nile-sidebar-menu-items/index.cjs.js.map +0 -1
  171. package/dist/nile-sidebar-menu-items/index.esm.js +0 -1
  172. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.cjs.js +0 -2
  173. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.cjs.js.map +0 -1
  174. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.cjs.js +0 -2
  175. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.cjs.js.map +0 -1
  176. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.esm.js +0 -36
  177. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.esm.js +0 -15
  178. package/dist/nile-sidebar-wrapper/index.cjs.js +0 -2
  179. package/dist/nile-sidebar-wrapper/index.cjs.js.map +0 -1
  180. package/dist/nile-sidebar-wrapper/index.esm.js +0 -1
  181. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.cjs.js +0 -2
  182. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.cjs.js.map +0 -1
  183. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.cjs.js +0 -2
  184. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.cjs.js.map +0 -1
  185. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.esm.js +0 -105
  186. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.esm.js +0 -16
  187. package/dist/nile-virtual-select/group-manager.cjs.js +0 -2
  188. package/dist/nile-virtual-select/group-manager.cjs.js.map +0 -1
  189. package/dist/nile-virtual-select/group-manager.esm.js +0 -1
  190. package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js +0 -2
  191. package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js.map +0 -1
  192. package/dist/nile-virtual-select/temp_nile-virtual-select copy.esm.js +0 -231
  193. package/dist/scopedElementsWrapper-1bff26ef.cjs.js +0 -2
  194. package/dist/scopedElementsWrapper-1bff26ef.cjs.js.map +0 -1
  195. package/dist/scopedElementsWrapper-4c29be11.esm.js +0 -7
  196. package/dist/scopedElementsWrapper-a112fc73.cjs.js +0 -6
  197. package/dist/scopedElementsWrapper-a112fc73.cjs.js.map +0 -1
  198. package/dist/scopedElementsWrapper-c815042c.cjs.js +0 -2
  199. package/dist/scopedElementsWrapper-c815042c.cjs.js.map +0 -1
  200. package/dist/src/internal/portal-manager.d.ts +0 -53
  201. package/dist/src/internal/portal-manager.js +0 -196
  202. package/dist/src/internal/portal-manager.js.map +0 -1
  203. package/dist/src/internal/portal.d.ts +0 -60
  204. package/dist/src/internal/portal.js +0 -199
  205. package/dist/src/internal/portal.js.map +0 -1
  206. package/dist/src/internal/resizable-helper.d.ts +0 -59
  207. package/dist/src/internal/resizable-helper.js +0 -115
  208. package/dist/src/internal/resizable-helper.js.map +0 -1
  209. package/dist/src/internal/resizable-styles.d.ts +0 -16
  210. package/dist/src/internal/resizable-styles.js +0 -144
  211. package/dist/src/internal/resizable-styles.js.map +0 -1
  212. package/dist/src/internal/virtualizer-error-handler.d.ts +0 -30
  213. package/dist/src/internal/virtualizer-error-handler.js +0 -82
  214. package/dist/src/internal/virtualizer-error-handler.js.map +0 -1
  215. package/dist/src/lib/index.d.ts +0 -7
  216. package/dist/src/lib/index.js +0 -8
  217. package/dist/src/lib/index.js.map +0 -1
  218. package/dist/src/lib/virtualize.d.ts +0 -32
  219. package/dist/src/lib/virtualize.js +0 -105
  220. package/dist/src/lib/virtualize.js.map +0 -1
  221. package/dist/src/lib/virtualize.test.d.ts +0 -7
  222. package/dist/src/lib/virtualize.test.js +0 -57
  223. package/dist/src/lib/virtualize.test.js.map +0 -1
  224. package/dist/src/nile-badge/__snapshots__/nile-badge.test.snap.js +0 -17
  225. package/dist/src/nile-calendar/__snapshots__/nile-calendar.test.snap.js +0 -310
  226. package/dist/src/nile-card/__snapshots__/nile-card.test.snap.js +0 -34
  227. package/dist/src/nile-checkbox/__snapshots__/nile-checkbox.test.snap.js +0 -31
  228. package/dist/src/nile-code-editor/Old_theme copy.d.ts +0 -191
  229. package/dist/src/nile-code-editor/Old_theme copy.js +0 -193
  230. package/dist/src/nile-code-editor/Old_theme copy.js.map +0 -1
  231. package/dist/src/nile-code-editor/backup_nile-code-editor copy.d.ts +0 -0
  232. package/dist/src/nile-code-editor/backup_nile-code-editor copy.js +0 -675
  233. package/dist/src/nile-code-editor/backup_nile-code-editor copy.js.map +0 -1
  234. package/dist/src/nile-code-editor/theme copy.d.ts +0 -191
  235. package/dist/src/nile-code-editor/theme copy.js +0 -193
  236. package/dist/src/nile-code-editor/theme copy.js.map +0 -1
  237. package/dist/src/nile-floating-panel/anchor-manager.d.ts +0 -26
  238. package/dist/src/nile-floating-panel/anchor-manager.js +0 -49
  239. package/dist/src/nile-floating-panel/anchor-manager.js.map +0 -1
  240. package/dist/src/nile-floating-panel/content-manager.d.ts +0 -23
  241. package/dist/src/nile-floating-panel/content-manager.js +0 -67
  242. package/dist/src/nile-floating-panel/content-manager.js.map +0 -1
  243. package/dist/src/nile-floating-panel/event-manager.d.ts +0 -38
  244. package/dist/src/nile-floating-panel/event-manager.js +0 -81
  245. package/dist/src/nile-floating-panel/event-manager.js.map +0 -1
  246. package/dist/src/nile-floating-panel/index.d.ts +0 -1
  247. package/dist/src/nile-floating-panel/index.js +0 -2
  248. package/dist/src/nile-floating-panel/index.js.map +0 -1
  249. package/dist/src/nile-floating-panel/nile-floating-panel.css.d.ts +0 -17
  250. package/dist/src/nile-floating-panel/nile-floating-panel.css.js +0 -51
  251. package/dist/src/nile-floating-panel/nile-floating-panel.css.js.map +0 -1
  252. package/dist/src/nile-floating-panel/nile-floating-panel.d.ts +0 -67
  253. package/dist/src/nile-floating-panel/nile-floating-panel.js +0 -203
  254. package/dist/src/nile-floating-panel/nile-floating-panel.js.map +0 -1
  255. package/dist/src/nile-floating-panel/position-manager.d.ts +0 -47
  256. package/dist/src/nile-floating-panel/position-manager.js +0 -94
  257. package/dist/src/nile-floating-panel/position-manager.js.map +0 -1
  258. package/dist/src/nile-floating-panel/style-manager.d.ts +0 -31
  259. package/dist/src/nile-floating-panel/style-manager.js +0 -74
  260. package/dist/src/nile-floating-panel/style-manager.js.map +0 -1
  261. package/dist/src/nile-floating-panel/types.d.ts +0 -29
  262. package/dist/src/nile-floating-panel/types.js +0 -8
  263. package/dist/src/nile-floating-panel/types.js.map +0 -1
  264. package/dist/src/nile-grid/data-processor.d.ts +0 -37
  265. package/dist/src/nile-grid/data-processor.js +0 -122
  266. package/dist/src/nile-grid/data-processor.js.map +0 -1
  267. package/dist/src/nile-grid/event-handlers.d.ts +0 -35
  268. package/dist/src/nile-grid/event-handlers.js +0 -158
  269. package/dist/src/nile-grid/event-handlers.js.map +0 -1
  270. package/dist/src/nile-grid/nile-grid.types.d.ts +0 -3
  271. package/dist/src/nile-grid/nile-grid.types.js +0 -2
  272. package/dist/src/nile-grid/nile-grid.types.js.map +0 -1
  273. package/dist/src/nile-grid/renderer.d.ts +0 -8
  274. package/dist/src/nile-grid/renderer.js +0 -78
  275. package/dist/src/nile-grid/renderer.js.map +0 -1
  276. package/dist/src/nile-grid/resize-handler.d.ts +0 -4
  277. package/dist/src/nile-grid/resize-handler.js +0 -36
  278. package/dist/src/nile-grid/resize-handler.js.map +0 -1
  279. package/dist/src/nile-grid/types.d.ts +0 -32
  280. package/dist/src/nile-grid/types.js +0 -2
  281. package/dist/src/nile-grid/types.js.map +0 -1
  282. package/dist/src/nile-grid/utils.d.ts +0 -4
  283. package/dist/src/nile-grid/utils.js +0 -32
  284. package/dist/src/nile-grid/utils.js.map +0 -1
  285. package/dist/src/nile-grid-body/index.d.ts +0 -1
  286. package/dist/src/nile-grid-body/index.js +0 -2
  287. package/dist/src/nile-grid-body/index.js.map +0 -1
  288. package/dist/src/nile-grid-body/nile-grid-body.css.d.ts +0 -12
  289. package/dist/src/nile-grid-body/nile-grid-body.css.js +0 -22
  290. package/dist/src/nile-grid-body/nile-grid-body.css.js.map +0 -1
  291. package/dist/src/nile-grid-body/nile-grid-body.d.ts +0 -29
  292. package/dist/src/nile-grid-body/nile-grid-body.js +0 -43
  293. package/dist/src/nile-grid-body/nile-grid-body.js.map +0 -1
  294. package/dist/src/nile-grid-cell-item/index.d.ts +0 -1
  295. package/dist/src/nile-grid-cell-item/index.js +0 -2
  296. package/dist/src/nile-grid-cell-item/index.js.map +0 -1
  297. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.css.d.ts +0 -12
  298. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.css.js +0 -47
  299. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.css.js.map +0 -1
  300. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.d.ts +0 -36
  301. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.js +0 -93
  302. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.js.map +0 -1
  303. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.utils.d.ts +0 -10
  304. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.utils.js +0 -34
  305. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.utils.js.map +0 -1
  306. package/dist/src/nile-grid-head/index.d.ts +0 -1
  307. package/dist/src/nile-grid-head/index.js +0 -2
  308. package/dist/src/nile-grid-head/index.js.map +0 -1
  309. package/dist/src/nile-grid-head/nile-grid-head.css.d.ts +0 -12
  310. package/dist/src/nile-grid-head/nile-grid-head.css.js +0 -19
  311. package/dist/src/nile-grid-head/nile-grid-head.css.js.map +0 -1
  312. package/dist/src/nile-grid-head/nile-grid-head.d.ts +0 -28
  313. package/dist/src/nile-grid-head/nile-grid-head.js +0 -41
  314. package/dist/src/nile-grid-head/nile-grid-head.js.map +0 -1
  315. package/dist/src/nile-grid-head-item/index.d.ts +0 -1
  316. package/dist/src/nile-grid-head-item/index.js +0 -2
  317. package/dist/src/nile-grid-head-item/index.js.map +0 -1
  318. package/dist/src/nile-grid-head-item/nile-grid-head-item.css.d.ts +0 -12
  319. package/dist/src/nile-grid-head-item/nile-grid-head-item.css.js +0 -46
  320. package/dist/src/nile-grid-head-item/nile-grid-head-item.css.js.map +0 -1
  321. package/dist/src/nile-grid-head-item/nile-grid-head-item.d.ts +0 -37
  322. package/dist/src/nile-grid-head-item/nile-grid-head-item.js +0 -100
  323. package/dist/src/nile-grid-head-item/nile-grid-head-item.js.map +0 -1
  324. package/dist/src/nile-grid-head-item/nile-grid-head-item.utils.d.ts +0 -10
  325. package/dist/src/nile-grid-head-item/nile-grid-head-item.utils.js +0 -34
  326. package/dist/src/nile-grid-head-item/nile-grid-head-item.utils.js.map +0 -1
  327. package/dist/src/nile-grid-row/index.d.ts +0 -1
  328. package/dist/src/nile-grid-row/index.js +0 -2
  329. package/dist/src/nile-grid-row/index.js.map +0 -1
  330. package/dist/src/nile-grid-row/nile-grid-row.css.d.ts +0 -12
  331. package/dist/src/nile-grid-row/nile-grid-row.css.js +0 -27
  332. package/dist/src/nile-grid-row/nile-grid-row.css.js.map +0 -1
  333. package/dist/src/nile-grid-row/nile-grid-row.d.ts +0 -29
  334. package/dist/src/nile-grid-row/nile-grid-row.js +0 -45
  335. package/dist/src/nile-grid-row/nile-grid-row.js.map +0 -1
  336. package/dist/src/nile-hero/__snapshots__/nile-hero.test.snap.js +0 -47
  337. package/dist/src/nile-icon/__snapshots__/nile-icon.test.snap.js +0 -16
  338. package/dist/src/nile-input/__snapshots__/nile-input.test.snap.js +0 -75
  339. package/dist/src/nile-menu/portal-manager.d.ts +0 -39
  340. package/dist/src/nile-menu/portal-manager.js +0 -340
  341. package/dist/src/nile-menu/portal-manager.js.map +0 -1
  342. package/dist/src/nile-menu/portal-utils.d.ts +0 -21
  343. package/dist/src/nile-menu/portal-utils.js +0 -128
  344. package/dist/src/nile-menu/portal-utils.js.map +0 -1
  345. package/dist/src/nile-popover/__snapshots__/nile-popover.test.snap.js +0 -22
  346. package/dist/src/nile-popover/popover-portal-handler.d.ts +0 -21
  347. package/dist/src/nile-popover/popover-portal-handler.js +0 -106
  348. package/dist/src/nile-popover/popover-portal-handler.js.map +0 -1
  349. package/dist/src/nile-portal-wrapper/index.d.ts +0 -1
  350. package/dist/src/nile-portal-wrapper/index.js +0 -2
  351. package/dist/src/nile-portal-wrapper/index.js.map +0 -1
  352. package/dist/src/nile-portal-wrapper/nile-portal-wrapper.d.ts +0 -47
  353. package/dist/src/nile-portal-wrapper/nile-portal-wrapper.js +0 -451
  354. package/dist/src/nile-portal-wrapper/nile-portal-wrapper.js.map +0 -1
  355. package/dist/src/nile-rich-text-editor/utils.d.ts +0 -13
  356. package/dist/src/nile-rich-text-editor/utils.js +0 -538
  357. package/dist/src/nile-rich-text-editor/utils.js.map +0 -1
  358. package/dist/src/nile-select/body-append-manager.d.ts +0 -90
  359. package/dist/src/nile-select/body-append-manager.js +0 -298
  360. package/dist/src/nile-select/body-append-manager.js.map +0 -1
  361. package/dist/src/nile-sidebar/index.d.ts +0 -28
  362. package/dist/src/nile-sidebar/index.js +0 -116
  363. package/dist/src/nile-sidebar/index.js.map +0 -1
  364. package/dist/src/nile-sidebar-menu/index.d.ts +0 -1
  365. package/dist/src/nile-sidebar-menu/index.js +0 -2
  366. package/dist/src/nile-sidebar-menu/index.js.map +0 -1
  367. package/dist/src/nile-sidebar-menu/nile-sidebar-menu.css.d.ts +0 -12
  368. package/dist/src/nile-sidebar-menu/nile-sidebar-menu.css.js +0 -47
  369. package/dist/src/nile-sidebar-menu/nile-sidebar-menu.css.js.map +0 -1
  370. package/dist/src/nile-sidebar-menu/nile-sidebar-menu.d.ts +0 -37
  371. package/dist/src/nile-sidebar-menu/nile-sidebar-menu.js +0 -84
  372. package/dist/src/nile-sidebar-menu/nile-sidebar-menu.js.map +0 -1
  373. package/dist/src/nile-sidebar-menu-items/index.d.ts +0 -1
  374. package/dist/src/nile-sidebar-menu-items/index.js +0 -2
  375. package/dist/src/nile-sidebar-menu-items/index.js.map +0 -1
  376. package/dist/src/nile-sidebar-menu-items/nile-sidebar-menu-items.css.d.ts +0 -12
  377. package/dist/src/nile-sidebar-menu-items/nile-sidebar-menu-items.css.js +0 -45
  378. package/dist/src/nile-sidebar-menu-items/nile-sidebar-menu-items.css.js.map +0 -1
  379. package/dist/src/nile-sidebar-menu-items/nile-sidebar-menu-items.d.ts +0 -35
  380. package/dist/src/nile-sidebar-menu-items/nile-sidebar-menu-items.js +0 -78
  381. package/dist/src/nile-sidebar-menu-items/nile-sidebar-menu-items.js.map +0 -1
  382. package/dist/src/nile-sidebar-wrapper/index.d.ts +0 -1
  383. package/dist/src/nile-sidebar-wrapper/index.js +0 -2
  384. package/dist/src/nile-sidebar-wrapper/index.js.map +0 -1
  385. package/dist/src/nile-sidebar-wrapper/nile-sidebar-wrapper.css.d.ts +0 -12
  386. package/dist/src/nile-sidebar-wrapper/nile-sidebar-wrapper.css.js +0 -114
  387. package/dist/src/nile-sidebar-wrapper/nile-sidebar-wrapper.css.js.map +0 -1
  388. package/dist/src/nile-sidebar-wrapper/nile-sidebar-wrapper.d.ts +0 -35
  389. package/dist/src/nile-sidebar-wrapper/nile-sidebar-wrapper.js +0 -89
  390. package/dist/src/nile-sidebar-wrapper/nile-sidebar-wrapper.js.map +0 -1
  391. package/dist/src/nile-table-body/virtual-scroll-helper.d.ts +0 -9
  392. package/dist/src/nile-table-body/virtual-scroll-helper.js +0 -24
  393. package/dist/src/nile-table-body/virtual-scroll-helper.js.map +0 -1
  394. package/dist/src/nile-virtual-select/body-append-helper.d.ts +0 -16
  395. package/dist/src/nile-virtual-select/body-append-helper.js +0 -95
  396. package/dist/src/nile-virtual-select/body-append-helper.js.map +0 -1
  397. package/dist/src/nile-virtual-select/group-manager.d.ts +0 -32
  398. package/dist/src/nile-virtual-select/group-manager.js +0 -134
  399. package/dist/src/nile-virtual-select/group-manager.js.map +0 -1
  400. package/dist/src/nile-virtual-select/portal-utils.d.ts +0 -65
  401. package/dist/src/nile-virtual-select/portal-utils.js +0 -376
  402. package/dist/src/nile-virtual-select/portal-utils.js.map +0 -1
  403. package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.d.ts +0 -273
  404. package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js +0 -1305
  405. package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js.map +0 -1
  406. package/dist/src/nile-virtual-select/virtualizer-error-handler.d.ts +0 -21
  407. package/dist/src/nile-virtual-select/virtualizer-error-handler.js +0 -56
  408. package/dist/src/nile-virtual-select/virtualizer-error-handler.js.map +0 -1
  409. package/dist/src/nile-virtual-select-disabled/index.d.ts +0 -1
  410. package/dist/src/nile-virtual-select-disabled/index.js +0 -2
  411. package/dist/src/nile-virtual-select-disabled/index.js.map +0 -1
  412. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.d.ts +0 -12
  413. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.js +0 -538
  414. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.js.map +0 -1
  415. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.d.ts +0 -299
  416. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.js +0 -1441
  417. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.js.map +0 -1
  418. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.d.ts +0 -7
  419. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.js +0 -631
  420. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.js.map +0 -1
  421. package/dist/src/nile-virtual-select-disabled/portal-manager.d.ts +0 -45
  422. package/dist/src/nile-virtual-select-disabled/portal-manager.js +0 -333
  423. package/dist/src/nile-virtual-select-disabled/portal-manager.js.map +0 -1
  424. package/dist/src/nile-virtual-select-disabled/renderer.d.ts +0 -16
  425. package/dist/src/nile-virtual-select-disabled/renderer.js +0 -79
  426. package/dist/src/nile-virtual-select-disabled/renderer.js.map +0 -1
  427. package/dist/src/nile-virtual-select-disabled/search-manager.d.ts +0 -12
  428. package/dist/src/nile-virtual-select-disabled/search-manager.js +0 -40
  429. package/dist/src/nile-virtual-select-disabled/search-manager.js.map +0 -1
  430. package/dist/src/nile-virtual-select-disabled/selection-manager.d.ts +0 -12
  431. package/dist/src/nile-virtual-select-disabled/selection-manager.js +0 -64
  432. package/dist/src/nile-virtual-select-disabled/selection-manager.js.map +0 -1
  433. package/dist/src/nile-virtual-select-disabled/types.d.ts +0 -50
  434. package/dist/src/nile-virtual-select-disabled/types.js +0 -8
  435. package/dist/src/nile-virtual-select-disabled/types.js.map +0 -1
  436. package/dist/src/nile-virtual-table-body/index.d.ts +0 -2
  437. package/dist/src/nile-virtual-table-body/index.js +0 -3
  438. package/dist/src/nile-virtual-table-body/index.js.map +0 -1
  439. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.d.ts +0 -1
  440. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js +0 -44
  441. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js.map +0 -1
  442. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.d.ts +0 -50
  443. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js +0 -135
  444. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js.map +0 -1
  445. package/dist/src/nile-virtual-table-body/renderer.d.ts +0 -16
  446. package/dist/src/nile-virtual-table-body/renderer.js +0 -49
  447. package/dist/src/nile-virtual-table-body/renderer.js.map +0 -1
  448. package/dist/src/utilities/stepper-utils.d.ts +0 -71
  449. package/dist/src/utilities/stepper-utils.js +0 -108
  450. package/dist/src/utilities/stepper-utils.js.map +0 -1
@@ -1,538 +0,0 @@
1
- export function closestBlock(node, root) {
2
- while (node && node !== root) {
3
- if (node instanceof HTMLElement) {
4
- const display = getComputedStyle(node).display;
5
- if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) ||
6
- display === 'block' ||
7
- display === 'list-item') {
8
- return node;
9
- }
10
- }
11
- node = node?.parentNode || null;
12
- }
13
- return root;
14
- }
15
- export function nearestElement(n) {
16
- while (n && !(n instanceof HTMLElement))
17
- n = n.parentNode;
18
- return n;
19
- }
20
- export function rgbToHex(rgb) {
21
- const m = rgb.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);
22
- if (!m)
23
- return '#000000';
24
- const r = Number(m[1]).toString(16).padStart(2, '0');
25
- const g = Number(m[2]).toString(16).padStart(2, '0');
26
- const b = Number(m[3]).toString(16).padStart(2, '0');
27
- return `#${r}${g}${b}`;
28
- }
29
- export function unwrap(node) {
30
- const p = node.parentNode;
31
- if (!p)
32
- return;
33
- while (node.firstChild)
34
- p.insertBefore(node.firstChild, node);
35
- p.removeChild(node);
36
- }
37
- export function surroundInline(range, tag, attrs) {
38
- const wrap = document.createElement(tag);
39
- if (attrs)
40
- Object.entries(attrs).forEach(([k, v]) => wrap.setAttribute(k, v));
41
- try {
42
- range.surroundContents(wrap);
43
- }
44
- catch {
45
- const frag = range.extractContents();
46
- wrap.appendChild(frag);
47
- range.insertNode(wrap);
48
- }
49
- }
50
- function unwrapAllMatching(node, root, matcher) {
51
- let n = node.parentNode;
52
- while (n && n !== root) {
53
- if (n instanceof HTMLElement && matcher(n)) {
54
- unwrap(n);
55
- n = node.parentNode;
56
- continue;
57
- }
58
- n = n.parentNode;
59
- }
60
- }
61
- export function toggleInlineTag(root, tag, attrs) {
62
- const sel = document.getSelection();
63
- if (!sel || sel.rangeCount === 0) {
64
- return;
65
- }
66
- const range = sel.getRangeAt(0);
67
- const aliases = {
68
- strong: ['strong', 'b'],
69
- em: ['em', 'i'],
70
- u: ['u'],
71
- span: ['span'],
72
- };
73
- const candidates = aliases[tag] ?? [tag];
74
- function isMatchingInline(el) {
75
- return candidates.includes(el.tagName.toLowerCase());
76
- }
77
- if (range.collapsed) {
78
- let n = range.startContainer;
79
- while (n && n !== root) {
80
- if (n instanceof HTMLElement && isMatchingInline(n)) {
81
- unwrapAllMatching(range.startContainer, root, isMatchingInline);
82
- return;
83
- }
84
- n = n.parentNode;
85
- }
86
- const elm = document.createElement(tag);
87
- if (attrs)
88
- Object.entries(attrs).forEach(([k, v]) => elm.setAttribute(k, v));
89
- elm.appendChild(document.createTextNode('\u200b'));
90
- range.insertNode(elm);
91
- const r = document.createRange();
92
- r.setStart(elm.firstChild, 1);
93
- r.collapse(true);
94
- sel.removeAllRanges();
95
- sel.addRange(r);
96
- return;
97
- }
98
- const startBlock = closestBlock(range.startContainer, root);
99
- const endBlock = closestBlock(range.endContainer, root);
100
- if (startBlock && endBlock && startBlock !== endBlock) {
101
- const blocks = [];
102
- let node = startBlock;
103
- while (node) {
104
- if (node instanceof HTMLElement)
105
- blocks.push(node);
106
- if (node === endBlock)
107
- break;
108
- node = node.nextSibling;
109
- }
110
- blocks.forEach((block, i) => {
111
- const r = document.createRange();
112
- r.selectNodeContents(block);
113
- const textNodes = [];
114
- const tw = document.createTreeWalker(block, NodeFilter.SHOW_TEXT, null);
115
- let tn;
116
- while ((tn = tw.nextNode())) {
117
- if (tn.nodeValue?.trim())
118
- textNodes.push(tn);
119
- }
120
- const allWrapped = textNodes.length > 0 &&
121
- textNodes.every(txt => {
122
- let n = txt;
123
- while (n && n !== block) {
124
- if (n instanceof HTMLElement && isMatchingInline(n))
125
- return true;
126
- n = n.parentNode;
127
- }
128
- return false;
129
- });
130
- if (allWrapped) {
131
- textNodes.forEach(txt => unwrapAllMatching(txt, block, isMatchingInline));
132
- }
133
- else {
134
- surroundInline(r, tag, attrs);
135
- }
136
- });
137
- return;
138
- }
139
- const walker = document.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, {
140
- acceptNode: n => {
141
- if (!n.nodeValue || !n.nodeValue.trim())
142
- return NodeFilter.FILTER_REJECT;
143
- const nodeRange = document.createRange();
144
- nodeRange.selectNodeContents(n);
145
- const intersects = range.compareBoundaryPoints(Range.END_TO_START, nodeRange) <= 0 &&
146
- range.compareBoundaryPoints(Range.START_TO_END, nodeRange) >= 0;
147
- return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
148
- },
149
- });
150
- const textNodes = [];
151
- let t;
152
- while ((t = walker.nextNode()))
153
- textNodes.push(t);
154
- if (textNodes.length === 0) {
155
- let n = range.startContainer;
156
- while (n && n !== root) {
157
- if (n instanceof HTMLElement && isMatchingInline(n)) {
158
- unwrapAllMatching(range.startContainer, root, isMatchingInline);
159
- return;
160
- }
161
- n = n.parentNode;
162
- }
163
- }
164
- const allWrapped = textNodes.length > 0 &&
165
- textNodes.every(txt => {
166
- let n = txt;
167
- while (n && n !== root) {
168
- if (n instanceof HTMLElement && isMatchingInline(n)) {
169
- return true;
170
- }
171
- n = n.parentNode;
172
- }
173
- return false;
174
- });
175
- if (allWrapped) {
176
- textNodes.forEach(txt => unwrapAllMatching(txt, root, isMatchingInline));
177
- }
178
- else {
179
- surroundInline(range, tag, attrs);
180
- }
181
- // restore selection
182
- const selRange = document.createRange();
183
- selRange.setStart(range.startContainer, range.startOffset);
184
- selRange.setEnd(range.endContainer, range.endOffset);
185
- sel.removeAllRanges();
186
- sel.addRange(selRange);
187
- }
188
- export function setBlockTag(root, tag) {
189
- const sel = document.getSelection();
190
- if (!sel || sel.rangeCount === 0)
191
- return;
192
- const range = sel.getRangeAt(0);
193
- const block = closestBlock(range.startContainer, root);
194
- if (!block)
195
- return;
196
- if (block.tagName.toLowerCase() === tag)
197
- return;
198
- const nb = document.createElement(tag);
199
- while (block.firstChild)
200
- nb.appendChild(block.firstChild);
201
- block.replaceWith(nb);
202
- const r = document.createRange();
203
- r.selectNodeContents(nb);
204
- r.collapse(true);
205
- sel.removeAllRanges();
206
- sel.addRange(r);
207
- }
208
- export function setAlignment(root, align) {
209
- const sel = document.getSelection();
210
- if (!sel || sel.rangeCount === 0)
211
- return;
212
- const range = sel.getRangeAt(0);
213
- let block = closestBlock(range.startContainer, root);
214
- if (!block)
215
- return;
216
- if (block.tagName.toLowerCase() === 'li') {
217
- block.style.textAlign = align;
218
- const list = block.closest('ul,ol');
219
- if (list)
220
- list.style.textAlign = align;
221
- }
222
- else {
223
- block.style.textAlign = align === 'justify' ? 'justify' : align;
224
- }
225
- }
226
- export function setFontFamily(root, family) {
227
- const sel = document.getSelection();
228
- if (!sel || sel.rangeCount === 0)
229
- return;
230
- const range = sel.getRangeAt(0);
231
- if (range.collapsed) {
232
- const span = document.createElement('span');
233
- span.style.fontFamily = family;
234
- span.appendChild(document.createTextNode('\u200b'));
235
- range.insertNode(span);
236
- const r = document.createRange();
237
- r.setStart(span.firstChild, 1);
238
- r.collapse(true);
239
- sel.removeAllRanges();
240
- sel.addRange(r);
241
- return;
242
- }
243
- surroundInline(range, 'span', { style: `font-family:${family}` });
244
- }
245
- function enclosingStyledSpan(editor, node, dataAttr) {
246
- while (node && node !== editor) {
247
- if (node instanceof HTMLSpanElement && node.hasAttribute(dataAttr)) {
248
- return node;
249
- }
250
- node = node.parentNode;
251
- }
252
- return null;
253
- }
254
- function applyInlineStyle(editor, cssProp, value, dataAttr) {
255
- const sel = window.getSelection();
256
- if (!sel || sel.rangeCount === 0)
257
- return;
258
- const r0 = sel.getRangeAt(0);
259
- if (!editor.contains(r0.commonAncestorContainer))
260
- return;
261
- const range = r0.cloneRange();
262
- if (range.collapsed) {
263
- const enclosing = enclosingStyledSpan(editor, range.startContainer, dataAttr);
264
- if (enclosing) {
265
- enclosing.style[cssProp] = value;
266
- mergeAdjacentStyledSpans(editor, dataAttr, cssProp);
267
- return;
268
- }
269
- const s = document.createElement('span');
270
- s.setAttribute(dataAttr, '1');
271
- s.style[cssProp] = value;
272
- s.appendChild(document.createTextNode('\u200B'));
273
- range.insertNode(s);
274
- const caret = document.createRange();
275
- caret.setStart(s.firstChild, 1);
276
- caret.collapse(true);
277
- sel.removeAllRanges();
278
- sel.addRange(caret);
279
- mergeAdjacentStyledSpans(editor, dataAttr, cssProp);
280
- return;
281
- }
282
- const leftEdge = enclosingStyledSpan(editor, range.startContainer, dataAttr);
283
- const rightEdge = enclosingStyledSpan(editor, range.endContainer, dataAttr);
284
- if (leftEdge && leftEdge === rightEdge) {
285
- if (rangeCoversWholeNode(range, leftEdge)) {
286
- leftEdge.style[cssProp] = value;
287
- }
288
- else {
289
- const mid = splitAndRecolorWithinSpan(leftEdge, range, dataAttr, cssProp, value);
290
- const sel = window.getSelection();
291
- const r = document.createRange();
292
- r.selectNodeContents(mid);
293
- sel?.removeAllRanges();
294
- sel?.addRange(r);
295
- }
296
- mergeAdjacentStyledSpans(editor, dataAttr, cssProp);
297
- return;
298
- }
299
- const commonEl = (() => {
300
- let n = range.commonAncestorContainer;
301
- while (n && !(n instanceof HTMLElement))
302
- n = n.parentNode;
303
- return n;
304
- })();
305
- const walker = document.createTreeWalker(commonEl || editor, NodeFilter.SHOW_TEXT, {
306
- acceptNode: n => {
307
- if (!n.nodeValue || !n.nodeValue.trim())
308
- return NodeFilter.FILTER_REJECT;
309
- const nodeRange = document.createRange();
310
- nodeRange.selectNodeContents(n);
311
- const intersects = range.compareBoundaryPoints(Range.END_TO_START, nodeRange) < 0 &&
312
- range.compareBoundaryPoints(Range.START_TO_END, nodeRange) > 0;
313
- return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
314
- },
315
- });
316
- const toProcess = [];
317
- let t;
318
- while ((t = walker.nextNode()))
319
- toProcess.push(t);
320
- toProcess.forEach(text => {
321
- let start = 0, end = text.length;
322
- if (text === range.startContainer)
323
- start = range.startOffset;
324
- if (text === range.endContainer)
325
- end = range.endOffset;
326
- if (start > 0)
327
- text = text.splitText(start);
328
- if (end < text.length)
329
- text.splitText(end);
330
- const existing = enclosingStyledSpan(editor, text, dataAttr);
331
- if (existing) {
332
- existing.style[cssProp] = value;
333
- return;
334
- }
335
- const span = document.createElement('span');
336
- span.setAttribute(dataAttr, '1');
337
- span.style[cssProp] = value;
338
- const parent = text.parentElement;
339
- parent.replaceChild(span, text);
340
- span.appendChild(text);
341
- });
342
- mergeAdjacentStyledSpans(editor, dataAttr, cssProp);
343
- // restore selection
344
- sel.removeAllRanges();
345
- sel.addRange(range);
346
- }
347
- // Is the range covering the entire node's contents?
348
- function rangeCoversWholeNode(range, node) {
349
- const all = document.createRange();
350
- all.selectNodeContents(node);
351
- return (range.compareBoundaryPoints(Range.START_TO_START, all) <= 0 &&
352
- range.compareBoundaryPoints(Range.END_TO_END, all) >= 0);
353
- }
354
- function hasRangeContent(r) {
355
- if (r.collapsed)
356
- return false;
357
- const text = r.cloneContents().textContent || '';
358
- return text.length > 0;
359
- }
360
- // Split one styled span into [left][middle][right]; recolor only middle
361
- function splitAndRecolorWithinSpan(span, range, dataAttr, cssProp, newValue) {
362
- const oldValue = span.style[cssProp];
363
- const left = document.createRange();
364
- left.setStart(span, 0);
365
- left.setEnd(range.startContainer, range.startOffset);
366
- const right = document.createRange();
367
- right.setStart(range.endContainer, range.endOffset);
368
- right.setEnd(span, span.childNodes.length);
369
- // Build replacement fragment
370
- const frag = document.createDocumentFragment();
371
- // helper to make a styled clone shell
372
- const makeShell = (val) => {
373
- const s = document.createElement('span');
374
- s.setAttribute(dataAttr, '1');
375
- s.style[cssProp] = val;
376
- return s;
377
- };
378
- if (hasRangeContent(left)) {
379
- const sLeft = makeShell(oldValue);
380
- sLeft.appendChild(left.cloneContents());
381
- frag.appendChild(sLeft);
382
- }
383
- const mid = makeShell(newValue);
384
- mid.appendChild(range.cloneContents());
385
- frag.appendChild(mid);
386
- if (hasRangeContent(right)) {
387
- const sRight = makeShell(oldValue);
388
- sRight.appendChild(right.cloneContents());
389
- frag.appendChild(sRight);
390
- }
391
- span.replaceWith(frag);
392
- return mid;
393
- }
394
- function mergeAdjacentStyledSpans(root, dataAttr, cssProp) {
395
- const spans = Array.from(root.querySelectorAll(`span[${dataAttr}]`));
396
- const valOf = (el) => el.style[cssProp];
397
- spans.forEach(s => {
398
- const nested = Array.from(s.querySelectorAll(`span[${dataAttr}]`));
399
- nested.forEach(child => {
400
- if (valOf(child) === valOf(s)) {
401
- while (child.firstChild)
402
- s.insertBefore(child.firstChild, child);
403
- child.remove();
404
- }
405
- });
406
- const prev = s.previousSibling;
407
- if (prev instanceof HTMLSpanElement &&
408
- prev.hasAttribute(dataAttr) &&
409
- valOf(prev) === valOf(s)) {
410
- while (s.firstChild)
411
- prev.appendChild(s.firstChild);
412
- s.remove();
413
- return;
414
- }
415
- const next = s.nextSibling;
416
- if (next instanceof HTMLSpanElement &&
417
- next.hasAttribute(dataAttr) &&
418
- valOf(next) === valOf(s)) {
419
- while (next.firstChild)
420
- s.appendChild(next.firstChild);
421
- next.remove();
422
- }
423
- });
424
- }
425
- export function setForeColor(editor, hex) {
426
- applyInlineStyle(editor, 'color', hex, 'data-rte-color');
427
- }
428
- export function setBackColor(editor, hex) {
429
- applyInlineStyle(editor, 'backgroundColor', hex, 'data-rte-bg');
430
- }
431
- export function toggleList(root, kind) {
432
- const sel = document.getSelection();
433
- if (!sel || sel.rangeCount === 0)
434
- return;
435
- const range = sel.getRangeAt(0);
436
- const blocks = [];
437
- const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
438
- acceptNode: n => {
439
- if (!(n instanceof HTMLElement))
440
- return NodeFilter.FILTER_SKIP;
441
- if (!/^(P|DIV|LI|H[1-6])$/.test(n.tagName))
442
- return NodeFilter.FILTER_SKIP;
443
- const r = document.createRange();
444
- r.selectNodeContents(n);
445
- const intersects = range.compareBoundaryPoints(Range.END_TO_START, r) < 0 &&
446
- range.compareBoundaryPoints(Range.START_TO_END, r) > 0;
447
- return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
448
- },
449
- });
450
- let n;
451
- while ((n = walker.nextNode())) {
452
- blocks.push(n);
453
- }
454
- if (blocks.length === 0) {
455
- const block = closestBlock(range.startContainer, root);
456
- if (block)
457
- blocks.push(block);
458
- }
459
- const firstLi = blocks[0].closest('li');
460
- if (firstLi) {
461
- const currentList = firstLi.closest('ul,ol');
462
- if (!currentList)
463
- return;
464
- if (currentList.tagName.toLowerCase() === kind) {
465
- const frag = document.createDocumentFragment();
466
- for (const li of Array.from(currentList.querySelectorAll('li'))) {
467
- const p = document.createElement('p');
468
- while (li.firstChild)
469
- p.appendChild(li.firstChild);
470
- frag.appendChild(p);
471
- }
472
- currentList.replaceWith(frag);
473
- }
474
- else {
475
- const newList = document.createElement(kind);
476
- while (currentList.firstChild)
477
- newList.appendChild(currentList.firstChild);
478
- currentList.replaceWith(newList);
479
- }
480
- return;
481
- }
482
- const newList = document.createElement(kind);
483
- for (const block of blocks) {
484
- const li = document.createElement('li');
485
- while (block.firstChild)
486
- li.appendChild(block.firstChild);
487
- newList.appendChild(li);
488
- block.replaceWith(newList);
489
- }
490
- }
491
- export function insertOrEditLink(root, href) {
492
- const sel = document.getSelection();
493
- if (!sel || sel.rangeCount === 0)
494
- return;
495
- const range = sel.getRangeAt(0);
496
- let n = range.startContainer;
497
- let a = null;
498
- while (n && n !== root) {
499
- if (n instanceof HTMLAnchorElement) {
500
- a = n;
501
- break;
502
- }
503
- n = n.parentNode;
504
- }
505
- const url = href ??
506
- (typeof window !== 'undefined'
507
- ? window.prompt('Enter URL', a?.href || 'https://') || ''
508
- : '');
509
- if (!url)
510
- return;
511
- if (a) {
512
- a.href = url;
513
- return;
514
- }
515
- if (range.collapsed) {
516
- const link = document.createElement('a');
517
- link.href = url;
518
- link.textContent = url;
519
- range.insertNode(link);
520
- const r = document.createRange();
521
- r.setStartAfter(link);
522
- r.collapse(true);
523
- sel.removeAllRanges();
524
- sel.addRange(r);
525
- return;
526
- }
527
- const link = document.createElement('a');
528
- link.href = url;
529
- try {
530
- range.surroundContents(link);
531
- }
532
- catch {
533
- const frag = range.extractContents();
534
- link.appendChild(frag);
535
- range.insertNode(link);
536
- }
537
- }
538
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/utils.ts"],"names":[],"mappings":"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","sourcesContent":["export function closestBlock(\n node: Node | null,\n root: HTMLElement\n): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (\n node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) ||\n display === 'block' ||\n display === 'list-item'\n ) {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n}\n\nexport function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n}\n\nexport function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2, '0');\n const g = Number(m[2]).toString(16).padStart(2, '0');\n const b = Number(m[3]).toString(16).padStart(2, '0');\n return `#${r}${g}${b}`;\n}\n\nexport function unwrap(node: HTMLElement) {\n const p = node.parentNode;\n if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n}\n\nexport function surroundInline(\n range: Range,\n tag: string,\n attrs?: Record<string, string>\n) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k, v]) => wrap.setAttribute(k, v));\n try {\n range.surroundContents(wrap);\n } catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n}\n\nfunction unwrapAllMatching(\n node: Node,\n root: HTMLElement,\n matcher: (el: HTMLElement) => boolean\n) {\n let n: Node | null = node.parentNode;\n while (n && n !== root) {\n if (n instanceof HTMLElement && matcher(n)) {\n unwrap(n);\n\n n = node.parentNode;\n continue;\n }\n n = n.parentNode;\n }\n}\n\nexport function toggleInlineTag(\n root: HTMLElement,\n tag: 'strong' | 'em' | 'u' | 'span',\n attrs?: Record<string, string>\n) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) {\n return;\n }\n const range = sel.getRangeAt(0);\n\n const aliases: Record<string, string[]> = {\n strong: ['strong', 'b'],\n em: ['em', 'i'],\n u: ['u'],\n span: ['span'],\n };\n const candidates = aliases[tag] ?? [tag];\n\n function isMatchingInline(el: HTMLElement): boolean {\n return candidates.includes(el.tagName.toLowerCase());\n }\n\n if (range.collapsed) {\n let n: Node | null = range.startContainer;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatchingInline(n)) {\n unwrapAllMatching(range.startContainer, root, isMatchingInline);\n return;\n }\n n = n.parentNode;\n }\n\n const elm = document.createElement(tag);\n if (attrs)\n Object.entries(attrs).forEach(([k, v]) => elm.setAttribute(k, v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n\n return;\n }\n\n const startBlock = closestBlock(range.startContainer, root);\n const endBlock = closestBlock(range.endContainer, root);\n if (startBlock && endBlock && startBlock !== endBlock) {\n const blocks: HTMLElement[] = [];\n let node: Node | null = startBlock;\n while (node) {\n if (node instanceof HTMLElement) blocks.push(node);\n if (node === endBlock) break;\n node = node.nextSibling;\n }\n\n blocks.forEach((block, i) => {\n const r = document.createRange();\n r.selectNodeContents(block);\n\n const textNodes: Text[] = [];\n const tw = document.createTreeWalker(block, NodeFilter.SHOW_TEXT, null);\n let tn: Node | null;\n while ((tn = tw.nextNode())) {\n if (tn.nodeValue?.trim()) textNodes.push(tn as Text);\n }\n\n const allWrapped =\n textNodes.length > 0 &&\n textNodes.every(txt => {\n let n: Node | null = txt;\n while (n && n !== block) {\n if (n instanceof HTMLElement && isMatchingInline(n)) return true;\n n = n.parentNode;\n }\n return false;\n });\n\n if (allWrapped) {\n textNodes.forEach(txt =>\n unwrapAllMatching(txt, block, isMatchingInline)\n );\n } else {\n surroundInline(r, tag, attrs);\n }\n });\n return;\n }\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: n => {\n if (!n.nodeValue || !n.nodeValue.trim())\n return NodeFilter.FILTER_REJECT;\n const nodeRange = document.createRange();\n nodeRange.selectNodeContents(n);\n const intersects =\n range.compareBoundaryPoints(Range.END_TO_START, nodeRange) <= 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, nodeRange) >= 0;\n return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n },\n }\n );\n\n const textNodes: Text[] = [];\n let t: Node | null;\n while ((t = walker.nextNode())) textNodes.push(t as Text);\n\n if (textNodes.length === 0) {\n let n: Node | null = range.startContainer;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatchingInline(n)) {\n unwrapAllMatching(range.startContainer, root, isMatchingInline);\n return;\n }\n n = n.parentNode;\n }\n }\n\n const allWrapped =\n textNodes.length > 0 &&\n textNodes.every(txt => {\n let n: Node | null = txt;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatchingInline(n)) {\n return true;\n }\n n = n.parentNode;\n }\n return false;\n });\n\n if (allWrapped) {\n textNodes.forEach(txt => unwrapAllMatching(txt, root, isMatchingInline));\n } else {\n surroundInline(range, tag, attrs);\n }\n\n // restore selection\n const selRange = document.createRange();\n selRange.setStart(range.startContainer, range.startOffset);\n selRange.setEnd(range.endContainer, range.endOffset);\n sel.removeAllRanges();\n sel.addRange(selRange);\n}\n\nexport function setBlockTag(root: HTMLElement, tag: 'p' | 'h1' | 'h2' | 'h3') {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root);\n if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange();\n r.selectNodeContents(nb);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n}\n\nexport function setAlignment(\n root: HTMLElement,\n align: 'left' | 'center' | 'right' | 'justify'\n) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n\n let block = closestBlock(range.startContainer, root);\n if (!block) return;\n\n if (block.tagName.toLowerCase() === 'li') {\n block.style.textAlign = align;\n const list = block.closest('ul,ol') as HTMLElement | null;\n if (list) list.style.textAlign = align;\n } else {\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n}\n\nexport function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange();\n r.setStart(span.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n}\n\nfunction enclosingStyledSpan(\n editor: HTMLElement,\n node: Node | null,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n): HTMLSpanElement | null {\n while (node && node !== editor) {\n if (node instanceof HTMLSpanElement && node.hasAttribute(dataAttr)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n}\n\nfunction applyInlineStyle(\n editor: HTMLElement,\n cssProp: 'color' | 'backgroundColor',\n value: string,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const r0 = sel.getRangeAt(0);\n if (!editor.contains(r0.commonAncestorContainer)) return;\n\n const range = r0.cloneRange();\n\n if (range.collapsed) {\n const enclosing = enclosingStyledSpan(\n editor,\n range.startContainer,\n dataAttr\n );\n if (enclosing) {\n (enclosing.style as any)[cssProp] = value;\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = value;\n s.appendChild(document.createTextNode('\\u200B'));\n range.insertNode(s);\n\n const caret = document.createRange();\n caret.setStart(s.firstChild!, 1);\n caret.collapse(true);\n sel.removeAllRanges();\n sel.addRange(caret);\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n const leftEdge = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n const rightEdge = enclosingStyledSpan(editor, range.endContainer, dataAttr);\n if (leftEdge && leftEdge === rightEdge) {\n if (rangeCoversWholeNode(range, leftEdge)) {\n (leftEdge.style as any)[cssProp] = value;\n } else {\n const mid = splitAndRecolorWithinSpan(\n leftEdge,\n range,\n dataAttr,\n cssProp,\n value\n );\n\n const sel = window.getSelection();\n const r = document.createRange();\n r.selectNodeContents(mid);\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n const commonEl = (() => {\n let n: Node | null = range.commonAncestorContainer;\n while (n && !(n instanceof HTMLElement)) n = n.parentNode;\n return n as HTMLElement | null;\n })();\n\n const walker = document.createTreeWalker(\n commonEl || editor,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: n => {\n if (!n.nodeValue || !n.nodeValue.trim())\n return NodeFilter.FILTER_REJECT;\n const nodeRange = document.createRange();\n nodeRange.selectNodeContents(n);\n const intersects =\n range.compareBoundaryPoints(Range.END_TO_START, nodeRange) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, nodeRange) > 0;\n return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n },\n }\n );\n\n const toProcess: Text[] = [];\n let t: Node | null;\n while ((t = walker.nextNode())) toProcess.push(t as Text);\n\n toProcess.forEach(text => {\n let start = 0,\n end = text.length;\n if (text === range.startContainer) start = range.startOffset;\n if (text === range.endContainer) end = range.endOffset;\n if (start > 0) text = text.splitText(start);\n if (end < text.length) text.splitText(end);\n\n const existing = enclosingStyledSpan(editor, text, dataAttr);\n if (existing) {\n (existing.style as any)[cssProp] = value;\n return;\n }\n\n const span = document.createElement('span');\n span.setAttribute(dataAttr, '1');\n (span.style as any)[cssProp] = value;\n const parent = text.parentElement!;\n parent.replaceChild(span, text);\n span.appendChild(text);\n });\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n\n // restore selection\n sel.removeAllRanges();\n sel.addRange(range);\n}\n\n// Is the range covering the entire node's contents?\nfunction rangeCoversWholeNode(range: Range, node: Node): boolean {\n const all = document.createRange();\n all.selectNodeContents(node);\n return (\n range.compareBoundaryPoints(Range.START_TO_START, all) <= 0 &&\n range.compareBoundaryPoints(Range.END_TO_END, all) >= 0\n );\n}\n\nfunction hasRangeContent(r: Range): boolean {\n if (r.collapsed) return false;\n const text = r.cloneContents().textContent || '';\n return text.length > 0;\n}\n\n// Split one styled span into [left][middle][right]; recolor only middle\nfunction splitAndRecolorWithinSpan(\n span: HTMLSpanElement,\n range: Range,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor',\n newValue: string\n): HTMLSpanElement {\n const oldValue = (span.style as any)[cssProp];\n\n const left = document.createRange();\n left.setStart(span, 0);\n left.setEnd(range.startContainer, range.startOffset);\n\n const right = document.createRange();\n right.setStart(range.endContainer, range.endOffset);\n right.setEnd(span, span.childNodes.length);\n\n // Build replacement fragment\n const frag = document.createDocumentFragment();\n\n // helper to make a styled clone shell\n const makeShell = (val: string) => {\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = val;\n return s;\n };\n\n if (hasRangeContent(left)) {\n const sLeft = makeShell(oldValue);\n sLeft.appendChild(left.cloneContents());\n frag.appendChild(sLeft);\n }\n\n const mid = makeShell(newValue);\n mid.appendChild(range.cloneContents());\n frag.appendChild(mid);\n\n if (hasRangeContent(right)) {\n const sRight = makeShell(oldValue);\n sRight.appendChild(right.cloneContents());\n frag.appendChild(sRight);\n }\n\n span.replaceWith(frag);\n return mid;\n}\n\nfunction mergeAdjacentStyledSpans(\n root: HTMLElement,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor'\n) {\n const spans = Array.from(\n root.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`)\n );\n\n const valOf = (el: HTMLElement) => (el.style as any)[cssProp];\n\n spans.forEach(s => {\n const nested = Array.from(\n s.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`)\n );\n nested.forEach(child => {\n if (valOf(child) === valOf(s)) {\n while (child.firstChild) s.insertBefore(child.firstChild, child);\n child.remove();\n }\n });\n\n const prev = s.previousSibling;\n if (\n prev instanceof HTMLSpanElement &&\n prev.hasAttribute(dataAttr) &&\n valOf(prev) === valOf(s)\n ) {\n while (s.firstChild) prev.appendChild(s.firstChild);\n s.remove();\n return;\n }\n\n const next = s.nextSibling;\n if (\n next instanceof HTMLSpanElement &&\n next.hasAttribute(dataAttr) &&\n valOf(next) === valOf(s)\n ) {\n while (next.firstChild) s.appendChild(next.firstChild);\n next.remove();\n }\n });\n}\n\nexport function setForeColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'color', hex, 'data-rte-color');\n}\nexport function setBackColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'backgroundColor', hex, 'data-rte-bg');\n}\n\nexport function toggleList(root: HTMLElement, kind: 'ul' | 'ol') {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n\n const blocks: HTMLElement[] = [];\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n acceptNode: n => {\n if (!(n instanceof HTMLElement)) return NodeFilter.FILTER_SKIP;\n if (!/^(P|DIV|LI|H[1-6])$/.test(n.tagName)) return NodeFilter.FILTER_SKIP;\n\n const r = document.createRange();\n r.selectNodeContents(n);\n const intersects =\n range.compareBoundaryPoints(Range.END_TO_START, r) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, r) > 0;\n return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n },\n });\n\n let n: Node | null;\n while ((n = walker.nextNode())) {\n blocks.push(n as HTMLElement);\n }\n\n if (blocks.length === 0) {\n const block = closestBlock(range.startContainer, root);\n if (block) blocks.push(block);\n }\n\n const firstLi = blocks[0].closest('li');\n if (firstLi) {\n const currentList = firstLi.closest('ul,ol') as HTMLElement | null;\n if (!currentList) return;\n\n if (currentList.tagName.toLowerCase() === kind) {\n const frag = document.createDocumentFragment();\n for (const li of Array.from(currentList.querySelectorAll('li'))) {\n const p = document.createElement('p');\n while (li.firstChild) p.appendChild(li.firstChild);\n frag.appendChild(p);\n }\n currentList.replaceWith(frag);\n } else {\n const newList = document.createElement(kind);\n while (currentList.firstChild)\n newList.appendChild(currentList.firstChild);\n currentList.replaceWith(newList);\n }\n return;\n }\n\n const newList = document.createElement(kind);\n for (const block of blocks) {\n const li = document.createElement('li');\n while (block.firstChild) li.appendChild(block.firstChild);\n newList.appendChild(li);\n block.replaceWith(newList);\n }\n}\n\nexport function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n\n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLAnchorElement) {\n a = n;\n break;\n }\n n = n.parentNode;\n }\n\n const url =\n href ??\n (typeof window !== 'undefined'\n ? window.prompt('Enter URL', a?.href || 'https://') || ''\n : '');\n if (!url) return;\n\n if (a) {\n a.href = url;\n return;\n }\n\n if (range.collapsed) {\n const link = document.createElement('a');\n link.href = url;\n link.textContent = url;\n range.insertNode(link);\n const r = document.createRange();\n r.setStartAfter(link);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n return;\n }\n\n const link = document.createElement('a');\n link.href = url;\n try {\n range.surroundContents(link);\n } catch {\n const frag = range.extractContents();\n link.appendChild(frag);\n range.insertNode(link);\n }\n}\n"]}