@aquera/nile-elements 1.9.7 → 1.9.9

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 (244) hide show
  1. package/README.md +6 -0
  2. package/dist/{index-249de90a.esm.js → index-289706c7.esm.js} +1 -1
  3. package/dist/{index-df196058.cjs.js → index-d7e6f1c6.cjs.js} +2 -2
  4. package/dist/index-d7e6f1c6.cjs.js.map +1 -0
  5. package/dist/index.cjs.js +1 -1
  6. package/dist/index.esm.js +1 -1
  7. package/dist/index.js +1587 -1276
  8. package/dist/katex-44476ab4.esm.js +1 -0
  9. package/dist/katex-f4186f87.cjs.js +2 -0
  10. package/dist/katex-f4186f87.cjs.js.map +1 -0
  11. package/dist/nile-color-picker/index.cjs.js +1 -1
  12. package/dist/nile-color-picker/index.esm.js +1 -1
  13. package/dist/nile-color-picker/nile-color-picker.cjs.js +1 -1
  14. package/dist/nile-color-picker/nile-color-picker.cjs.js.map +1 -1
  15. package/dist/nile-color-picker/nile-color-picker.esm.js +1 -1
  16. package/dist/nile-select/virtual-scroll-helper.cjs.js +1 -1
  17. package/dist/nile-select/virtual-scroll-helper.cjs.js.map +1 -1
  18. package/dist/nile-select/virtual-scroll-helper.esm.js +52 -44
  19. package/dist/nile-virtual-select/renderer.cjs.js +1 -1
  20. package/dist/nile-virtual-select/renderer.cjs.js.map +1 -1
  21. package/dist/nile-virtual-select/renderer.esm.js +23 -22
  22. package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +1 -1
  23. package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -1
  24. package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -1
  25. package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +1 -1
  26. package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js.map +1 -1
  27. package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -1
  28. package/dist/nile-wysiwyg-editor/engine/index.cjs.js +1 -1
  29. package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -1
  30. package/dist/nile-wysiwyg-editor/engine/inputrules.cjs.js +1 -1
  31. package/dist/nile-wysiwyg-editor/engine/keymap.cjs.js +1 -1
  32. package/dist/nile-wysiwyg-editor/engine/keymap.esm.js +1 -1
  33. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +1 -1
  34. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -1
  35. package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -1
  36. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js +1 -1
  37. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.cjs.js.map +1 -1
  38. package/dist/nile-wysiwyg-editor/engine/plugins/embed-view.esm.js +1 -1
  39. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js +1 -1
  40. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.cjs.js.map +1 -1
  41. package/dist/nile-wysiwyg-editor/engine/plugins/embeds.esm.js +1 -1
  42. package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js +1 -1
  43. package/dist/nile-wysiwyg-editor/engine/plugins/math-view.cjs.js.map +1 -1
  44. package/dist/nile-wysiwyg-editor/engine/plugins/math-view.esm.js +1 -1
  45. package/dist/nile-wysiwyg-editor/engine/plugins/style-block-view.cjs.js +2 -0
  46. package/dist/nile-wysiwyg-editor/engine/plugins/style-block-view.cjs.js.map +1 -0
  47. package/dist/nile-wysiwyg-editor/engine/plugins/style-block-view.esm.js +1 -0
  48. package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js +1 -1
  49. package/dist/nile-wysiwyg-editor/engine/plugins/tables.cjs.js.map +1 -1
  50. package/dist/nile-wysiwyg-editor/engine/plugins/tables.esm.js +1 -1
  51. package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js +1 -1
  52. package/dist/nile-wysiwyg-editor/engine/sanitize.cjs.js.map +1 -1
  53. package/dist/nile-wysiwyg-editor/engine/sanitize.esm.js +1 -1
  54. package/dist/nile-wysiwyg-editor/engine/schema.cjs.js +1 -1
  55. package/dist/nile-wysiwyg-editor/engine/schema.cjs.js.map +1 -1
  56. package/dist/nile-wysiwyg-editor/engine/schema.esm.js +1 -1
  57. package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js +1 -1
  58. package/dist/nile-wysiwyg-editor/engine/selection-state.cjs.js.map +1 -1
  59. package/dist/nile-wysiwyg-editor/engine/selection-state.esm.js +1 -1
  60. package/dist/nile-wysiwyg-editor/index.cjs.js +1 -1
  61. package/dist/nile-wysiwyg-editor/index.esm.js +1 -1
  62. package/dist/nile-wysiwyg-editor/math/katex-renderer.cjs.js +2 -0
  63. package/dist/nile-wysiwyg-editor/math/katex-renderer.cjs.js.map +1 -0
  64. package/dist/nile-wysiwyg-editor/math/katex-renderer.esm.js +1 -0
  65. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
  66. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -1
  67. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +1 -1
  68. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -1
  69. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +22 -3
  70. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +7 -6
  71. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.cjs.js +1 -1
  72. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.esm.js +1 -1
  73. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.cjs.js +2 -0
  74. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.cjs.js.map +1 -0
  75. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.esm.js +1 -0
  76. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js +1 -1
  77. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.cjs.js.map +1 -1
  78. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +1 -1
  79. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -1
  80. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +33 -54
  81. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.esm.js +83 -95
  82. package/dist/nile-wysiwyg-editor/types.cjs.js +1 -1
  83. package/dist/nile-wysiwyg-editor/types.cjs.js.map +1 -1
  84. package/dist/nile-wysiwyg-editor/types.esm.js +1 -1
  85. package/dist/nile-wysiwyg-editor/ui/bubble-item.cjs.js +2 -0
  86. package/dist/nile-wysiwyg-editor/ui/bubble-item.cjs.js.map +1 -0
  87. package/dist/nile-wysiwyg-editor/ui/bubble-item.esm.js +1 -0
  88. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +1 -1
  89. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -1
  90. package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +23 -15
  91. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
  92. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -1
  93. package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +3 -3
  94. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +1 -1
  95. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -1
  96. package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +2 -2
  97. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +1 -1
  98. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -1
  99. package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +0 -3
  100. package/dist/nile-wysiwyg-editor/ui/preview.cjs.js +2 -0
  101. package/dist/nile-wysiwyg-editor/ui/preview.cjs.js.map +1 -0
  102. package/dist/nile-wysiwyg-editor/ui/preview.esm.js +8 -0
  103. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
  104. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -1
  105. package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +225 -24
  106. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js +1 -1
  107. package/dist/nile-wysiwyg-editor/ui/suggest-list.cjs.js.map +1 -1
  108. package/dist/nile-wysiwyg-editor/ui/suggest-list.esm.js +9 -9
  109. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js +1 -1
  110. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.cjs.js.map +1 -1
  111. package/dist/nile-wysiwyg-editor/ui/table-grid-picker.esm.js +115 -13
  112. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js +1 -1
  113. package/dist/nile-wysiwyg-editor/ui/table-menu.cjs.js.map +1 -1
  114. package/dist/nile-wysiwyg-editor/ui/table-menu.esm.js +13 -12
  115. package/dist/src/index.d.ts +5 -0
  116. package/dist/src/index.js +3 -0
  117. package/dist/src/index.js.map +1 -1
  118. package/dist/src/nile-color-picker/nile-color-picker.d.ts +1 -0
  119. package/dist/src/nile-color-picker/nile-color-picker.js +1 -0
  120. package/dist/src/nile-color-picker/nile-color-picker.js.map +1 -1
  121. package/dist/src/nile-select/virtual-scroll-helper.js +9 -1
  122. package/dist/src/nile-select/virtual-scroll-helper.js.map +1 -1
  123. package/dist/src/nile-virtual-select/renderer.js +1 -0
  124. package/dist/src/nile-virtual-select/renderer.js.map +1 -1
  125. package/dist/src/nile-wysiwyg-editor/engine/index.d.ts +1 -0
  126. package/dist/src/nile-wysiwyg-editor/engine/index.js +1 -0
  127. package/dist/src/nile-wysiwyg-editor/engine/index.js.map +1 -1
  128. package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js +3 -0
  129. package/dist/src/nile-wysiwyg-editor/engine/plugins/embed-view.js.map +1 -1
  130. package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.d.ts +19 -4
  131. package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js +23 -18
  132. package/dist/src/nile-wysiwyg-editor/engine/plugins/embeds.js.map +1 -1
  133. package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.d.ts +8 -3
  134. package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js +41 -4
  135. package/dist/src/nile-wysiwyg-editor/engine/plugins/math-view.js.map +1 -1
  136. package/dist/src/nile-wysiwyg-editor/engine/plugins/style-block-view.d.ts +17 -0
  137. package/dist/src/nile-wysiwyg-editor/engine/plugins/style-block-view.js +174 -0
  138. package/dist/src/nile-wysiwyg-editor/engine/plugins/style-block-view.js.map +1 -0
  139. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js +33 -2
  140. package/dist/src/nile-wysiwyg-editor/engine/plugins/tables.js.map +1 -1
  141. package/dist/src/nile-wysiwyg-editor/engine/pm.test.js +49 -8
  142. package/dist/src/nile-wysiwyg-editor/engine/pm.test.js.map +1 -1
  143. package/dist/src/nile-wysiwyg-editor/engine/sanitize.d.ts +12 -0
  144. package/dist/src/nile-wysiwyg-editor/engine/sanitize.js +76 -8
  145. package/dist/src/nile-wysiwyg-editor/engine/sanitize.js.map +1 -1
  146. package/dist/src/nile-wysiwyg-editor/engine/schema.d.ts +2 -0
  147. package/dist/src/nile-wysiwyg-editor/engine/schema.js +154 -2
  148. package/dist/src/nile-wysiwyg-editor/engine/schema.js.map +1 -1
  149. package/dist/src/nile-wysiwyg-editor/index.d.ts +5 -0
  150. package/dist/src/nile-wysiwyg-editor/index.js +3 -0
  151. package/dist/src/nile-wysiwyg-editor/index.js.map +1 -1
  152. package/dist/src/nile-wysiwyg-editor/math/katex-renderer.d.ts +38 -0
  153. package/dist/src/nile-wysiwyg-editor/math/katex-renderer.js +40 -0
  154. package/dist/src/nile-wysiwyg-editor/math/katex-renderer.js.map +1 -0
  155. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +22 -3
  156. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -1
  157. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +36 -0
  158. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +125 -8
  159. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
  160. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js +5 -2
  161. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.js.map +1 -1
  162. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.d.ts +2 -0
  163. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js +1 -0
  164. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.js.map +1 -1
  165. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.d.ts +55 -0
  166. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.js +79 -0
  167. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.js.map +1 -0
  168. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +33 -54
  169. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -1
  170. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.d.ts +50 -2
  171. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js +158 -102
  172. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.js.map +1 -1
  173. package/dist/src/nile-wysiwyg-editor/types.d.ts +4 -2
  174. package/dist/src/nile-wysiwyg-editor/types.js +2 -2
  175. package/dist/src/nile-wysiwyg-editor/types.js.map +1 -1
  176. package/dist/src/nile-wysiwyg-editor/ui/bubble-item.d.ts +48 -0
  177. package/dist/src/nile-wysiwyg-editor/ui/bubble-item.js +69 -0
  178. package/dist/src/nile-wysiwyg-editor/ui/bubble-item.js.map +1 -0
  179. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.d.ts +17 -2
  180. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +128 -35
  181. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
  182. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.d.ts +2 -1
  183. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +4 -3
  184. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
  185. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +0 -3
  186. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
  187. package/dist/src/nile-wysiwyg-editor/ui/preview.d.ts +20 -0
  188. package/dist/src/nile-wysiwyg-editor/ui/preview.js +44 -0
  189. package/dist/src/nile-wysiwyg-editor/ui/preview.js.map +1 -0
  190. package/dist/src/nile-wysiwyg-editor/ui/source-view.d.ts +35 -3
  191. package/dist/src/nile-wysiwyg-editor/ui/source-view.js +337 -24
  192. package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
  193. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.d.ts +1 -0
  194. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +9 -0
  195. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
  196. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.d.ts +13 -2
  197. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +166 -10
  198. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
  199. package/dist/src/nile-wysiwyg-editor/ui/table-menu.d.ts +1 -0
  200. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +10 -8
  201. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
  202. package/dist/src/version.js +1 -1
  203. package/dist/src/version.js.map +1 -1
  204. package/dist/tsconfig.tsbuildinfo +1 -1
  205. package/dist/xml-25c4108a.esm.js +1 -0
  206. package/dist/xml-90fd974e.cjs.js +2 -0
  207. package/dist/xml-90fd974e.cjs.js.map +1 -0
  208. package/package.json +2 -1
  209. package/rollup.config.js +1 -0
  210. package/src/index.ts +8 -0
  211. package/src/nile-color-picker/nile-color-picker.ts +1 -0
  212. package/src/nile-select/virtual-scroll-helper.ts +9 -1
  213. package/src/nile-virtual-select/renderer.ts +1 -1
  214. package/src/nile-wysiwyg-editor/engine/index.ts +1 -0
  215. package/src/nile-wysiwyg-editor/engine/plugins/embed-view.ts +3 -0
  216. package/src/nile-wysiwyg-editor/engine/plugins/embeds.ts +26 -20
  217. package/src/nile-wysiwyg-editor/engine/plugins/math-view.ts +45 -4
  218. package/src/nile-wysiwyg-editor/engine/plugins/style-block-view.ts +178 -0
  219. package/src/nile-wysiwyg-editor/engine/plugins/tables.ts +34 -2
  220. package/src/nile-wysiwyg-editor/engine/pm.test.ts +58 -8
  221. package/src/nile-wysiwyg-editor/engine/sanitize.ts +71 -8
  222. package/src/nile-wysiwyg-editor/engine/schema.ts +158 -7
  223. package/src/nile-wysiwyg-editor/index.ts +5 -0
  224. package/src/nile-wysiwyg-editor/math/katex-renderer.ts +59 -0
  225. package/src/nile-wysiwyg-editor/math/katex.d.ts +17 -0
  226. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +22 -3
  227. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.test.ts +5 -2
  228. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +142 -7
  229. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/index.ts +2 -0
  230. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar-item.ts +68 -0
  231. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +33 -54
  232. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts +202 -108
  233. package/src/nile-wysiwyg-editor/types.ts +6 -4
  234. package/src/nile-wysiwyg-editor/ui/bubble-item.ts +60 -0
  235. package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +147 -40
  236. package/src/nile-wysiwyg-editor/ui/embed-panel.ts +4 -3
  237. package/src/nile-wysiwyg-editor/ui/math-panel.ts +0 -3
  238. package/src/nile-wysiwyg-editor/ui/preview.ts +42 -0
  239. package/src/nile-wysiwyg-editor/ui/source-view.ts +339 -31
  240. package/src/nile-wysiwyg-editor/ui/suggest-list.ts +10 -0
  241. package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +160 -10
  242. package/src/nile-wysiwyg-editor/ui/table-menu.ts +10 -8
  243. package/vscode-html-custom-data.json +75 -6
  244. package/dist/index-df196058.cjs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nile-wysiwyg-toolbar.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResultArray, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { renderGlyph } from '../../internal/glyph';\nimport { styles } from './nile-wysiwyg-toolbar.css';\nimport type { ToolbarState } from '../engine/selection-state';\nimport type { CommandAttrs, CommandName } from '../engine/commands';\nimport { DEFAULT_TOOLBAR, UiCommandName } from '../types';\nimport '../ui/table-grid-picker';\n\ninterface ButtonDef {\n kind: 'button';\n command: CommandName | UiCommandName;\n attrs?: CommandAttrs;\n label: string;\n /** nile-glyph icon name; `text` is the fallback when no glyph exists. */\n icon?: string;\n /** Glyph shown instead of `icon` while the button is active (e.g. fullscreen). */\n iconActive?: string;\n text?: TemplateResult | string;\n active?: (s: ToolbarState) => boolean;\n disabled?: (s: ToolbarState) => boolean;\n}\n\ninterface SelectDef {\n kind: 'select';\n label: string;\n /** Static list, or contextual options derived from the toolbar state. */\n options:\n | { value: string; label: string }[]\n | ((s: ToolbarState | undefined) => { value: string; label: string }[]);\n /** Current value derived from toolbar state ('' = default option). */\n value: (s: ToolbarState) => string;\n /** Maps the chosen option to a command invocation. */\n command: (value: string) => { name: CommandName; attrs?: CommandAttrs };\n disabled?: (s: ToolbarState) => boolean;\n}\n\ninterface ColorDef {\n kind: 'color';\n label: string;\n glyph: string;\n command: CommandName;\n value: (s: ToolbarState) => string | null;\n}\n\ntype ItemDef = ButtonDef | SelectDef | ColorDef;\n\nconst FONT_FAMILIES = [\n 'Arial',\n 'Georgia',\n 'Tahoma',\n 'Times New Roman',\n 'Trebuchet MS',\n 'Verdana',\n 'Courier New',\n];\n\nconst FONT_SIZES = ['10px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '48px'];\n\n\n/** Same default palette as nile-rte-color. */\nconst COLOR_PALETTE = [\n '#000000', '#444444', '#666666', '#999999', '#cccccc', '#eeeeee', '#ffffff',\n '#d32f2f', '#f44336', '#ff9800', '#ffeb3b', '#4caf50', '#2196f3', '#3f51b5', '#9c27b0',\n '#03a9f4', '#00bcd4', '#009688', '#8bc34a', '#cddc39', '#ffc107', '#ff5722',\n];\n\nconst ITEMS: Record<string, ItemDef> = {\n undo: {\n kind: 'button',\n command: 'undo',\n label: 'Undo (Ctrl+Z)',\n icon: 'undo',\n disabled: s => !s.canUndo,\n },\n redo: {\n kind: 'button',\n command: 'redo',\n label: 'Redo (Ctrl+Y)',\n icon: 'redo',\n disabled: s => !s.canRedo,\n },\n findReplace: {\n kind: 'button',\n command: 'openFind',\n label: 'Find & replace (Ctrl+F)',\n icon: 'ng-text-search',\n },\n bold: {\n kind: 'button',\n command: 'bold',\n label: 'Bold (Ctrl+B)',\n icon: 'format_bold',\n active: s => s.bold,\n },\n italic: {\n kind: 'button',\n command: 'italic',\n label: 'Italic (Ctrl+I)',\n icon: 'format_italic',\n active: s => s.italic,\n },\n underline: {\n kind: 'button',\n command: 'underline',\n label: 'Underline (Ctrl+U)',\n icon: 'format_underline',\n active: s => s.underline,\n },\n strike: {\n kind: 'button',\n command: 'strike',\n label: 'Strikethrough',\n icon: 'ng-strikethrough',\n active: s => s.strike,\n },\n subscript: {\n kind: 'button',\n command: 'subscript',\n label: 'Subscript (Ctrl+,)',\n icon: 'ng-subscript',\n active: s => s.subscript,\n },\n superscript: {\n kind: 'button',\n command: 'superscript',\n label: 'Superscript (Ctrl+.)',\n icon: 'ng-superscript',\n active: s => s.superscript,\n },\n code: {\n kind: 'button',\n command: 'code',\n label: 'Inline code',\n text: '</>',\n active: s => s.code,\n },\n alignLeft: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'left' },\n label: 'Align left',\n icon: 'format_align_left',\n active: s => s.align === 'left',\n },\n alignCenter: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'center' },\n label: 'Align center',\n icon: 'format_align_middle',\n active: s => s.align === 'center',\n },\n alignRight: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'right' },\n label: 'Align right',\n icon: 'format_align_right',\n active: s => s.align === 'right',\n },\n alignJustify: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'justify' },\n label: 'Justify',\n icon: 'format_align_justify',\n active: s => s.align === 'justify',\n },\n bulletList: {\n kind: 'button',\n command: 'bulletList',\n label: 'Bulleted list',\n icon: 'format_list_bulleted',\n active: s => s.inBulletList,\n },\n orderedList: {\n kind: 'button',\n command: 'orderedList',\n label: 'Numbered list',\n icon: 'format_list_numbered',\n active: s => s.inOrderedList,\n },\n taskList: {\n kind: 'button',\n command: 'taskList',\n label: 'Checklist',\n icon: 'ng-list-checks',\n active: s => s.inTaskList,\n },\n indent: {\n kind: 'button',\n command: 'indent',\n label: 'Increase indent (Ctrl+])',\n icon: 'ng-list-indent-increase',\n disabled: s => s.inCodeBlock,\n },\n outdent: {\n kind: 'button',\n command: 'outdent',\n label: 'Decrease indent (Ctrl+[)',\n icon: 'ng-list-indent-decrease',\n disabled: s =>\n !s.inBulletList &&\n !s.inOrderedList &&\n !s.inTaskList &&\n !s.inBlockquote &&\n s.blockIndent === 0,\n },\n listStyle: {\n kind: 'select',\n label: 'List style',\n options: s =>\n s?.inOrderedList\n ? [\n { value: '', label: '1, 2, 3' },\n { value: 'lower-alpha', label: 'a, b, c' },\n { value: 'upper-alpha', label: 'A, B, C' },\n { value: 'lower-roman', label: 'i, ii, iii' },\n { value: 'upper-roman', label: 'I, II, III' },\n { value: 'multilevel', label: '1.1, 1.1.1' },\n ]\n : [\n { value: '', label: '• Disc' },\n { value: 'circle', label: '○ Circle' },\n { value: 'square', label: '▪ Square' },\n ],\n value: s => s.listStyle ?? '',\n command: value => ({ name: 'setListStyle', attrs: { style: value || null } }),\n disabled: s => !s.inBulletList && !s.inOrderedList,\n },\n blockquote: {\n kind: 'button',\n command: 'blockquote',\n label: 'Blockquote',\n text: '❝',\n active: s => s.inBlockquote,\n },\n link: {\n kind: 'button',\n command: 'openLink',\n label: 'Link (Ctrl+K)',\n icon: 'link_2',\n active: s => s.linkActive,\n },\n bookmark: {\n kind: 'button',\n command: 'openBookmark',\n label: 'Insert bookmark (in-text anchor)',\n icon: 'ng-bookmark',\n },\n horizontalRule: {\n kind: 'button',\n command: 'horizontalRule',\n label: 'Horizontal rule',\n icon: 'minus',\n },\n specialChars: {\n kind: 'button',\n command: 'openSpecialChars',\n label: 'Special characters',\n text: 'Ω',\n },\n emoji: {\n kind: 'button',\n command: 'openEmoji',\n label: 'Emoji',\n icon: 'ng-smile',\n },\n codeBlock: {\n kind: 'button',\n command: 'codeBlock',\n label: 'Code block (Ctrl+Alt+C)',\n icon: 'ng-code',\n active: s => s.inCodeBlock,\n },\n image: {\n kind: 'button',\n command: 'openImage',\n label: 'Insert image',\n icon: 'image_2',\n },\n embed: {\n kind: 'button',\n command: 'openEmbed',\n label: 'Embed video (YouTube, Vimeo, Loom)',\n icon: 'ng-video',\n },\n sourceView: {\n kind: 'button',\n command: 'toggleSource',\n label: 'HTML source',\n icon: 'ng-code-xml',\n },\n showBlocks: {\n kind: 'button',\n command: 'toggleShowBlocks',\n label: 'Show blocks',\n icon: 'ng-square-pilcrow',\n active: s => !!s.showBlocks,\n },\n clearFormatting: {\n kind: 'button',\n command: 'clearFormatting',\n label: 'Clear formatting',\n icon: 'format_clear',\n },\n pastePlainText: {\n kind: 'button',\n command: 'togglePastePlainText',\n label: 'Paste as plain text',\n icon: 'ng-clipboard-paste',\n active: s => !!s.pasteAsPlainText,\n },\n fullscreen: {\n kind: 'button',\n command: 'toggleFullscreen',\n label: 'Fullscreen (Esc to exit)',\n icon: 'ng-maximize-2',\n iconActive: 'ng-minimize-2',\n active: s => !!s.fullscreen,\n },\n shortcutHelp: {\n kind: 'button',\n command: 'openShortcutHelp',\n label: 'Keyboard shortcuts (Ctrl+/)',\n icon: 'ng-keyboard',\n },\n exportPdf: {\n kind: 'button',\n command: 'exportPdf',\n label: 'Export to PDF',\n icon: 'ng-printer',\n },\n exportWord: {\n kind: 'button',\n command: 'exportWord',\n label: 'Export to Word',\n icon: 'ng-file-text',\n },\n exportInlineHtml: {\n kind: 'button',\n command: 'exportInlineHtml',\n label: 'Export HTML with inline styles (email)',\n icon: 'ng-file-code',\n },\n importMarkdown: {\n kind: 'button',\n command: 'openMarkdown',\n label: 'Insert from Markdown',\n icon: 'ng-clipboard-paste',\n },\n importWord: {\n kind: 'button',\n command: 'importWord',\n label: 'Import from Word',\n icon: 'ng-file-input',\n },\n formatPainter: {\n kind: 'button',\n command: 'toggleFormatPainter',\n label: 'Format painter (copy formatting)',\n icon: 'ng-paintbrush',\n active: s => !!s.formatPainter,\n },\n caseChange: {\n kind: 'select',\n label: 'Change case',\n options: [\n { value: '', label: 'Case' },\n { value: 'upper', label: 'UPPERCASE' },\n { value: 'lower', label: 'lowercase' },\n { value: 'title', label: 'Title Case' },\n { value: 'sentence', label: 'Sentence case' },\n ],\n value: () => '',\n command: value => ({\n name: 'changeCase',\n attrs: { textCase: (value || 'upper') as 'upper' | 'lower' | 'title' | 'sentence' },\n }),\n disabled: s => s.selectionEmpty,\n },\n mergeField: {\n kind: 'button',\n command: 'openMergeField',\n label: 'Insert merge field',\n icon: 'ng-braces',\n },\n template: {\n kind: 'button',\n command: 'openTemplate',\n label: 'Insert template',\n icon: 'ng-layout-template',\n },\n math: {\n kind: 'button',\n command: 'openMath',\n label: 'Insert math (LaTeX)',\n icon: 'ng-sigma',\n },\n heading: {\n kind: 'select',\n label: 'Paragraph style',\n options: [\n { value: '', label: 'Paragraph' },\n { value: '1', label: 'Heading 1' },\n { value: '2', label: 'Heading 2' },\n { value: '3', label: 'Heading 3' },\n { value: '4', label: 'Heading 4' },\n { value: '5', label: 'Heading 5' },\n { value: '6', label: 'Heading 6' },\n ],\n value: s => (s.headingLevel ? String(s.headingLevel) : ''),\n command: value =>\n value === ''\n ? { name: 'paragraph' }\n : { name: 'heading', attrs: { level: Number(value) } },\n },\n fontFamily: {\n kind: 'select',\n label: 'Font family',\n options: [\n { value: '', label: 'Font' },\n ...FONT_FAMILIES.map(f => ({ value: f, label: f })),\n ],\n value: s => s.fontFamily ?? '',\n command: value => ({ name: 'fontFamily', attrs: { family: value || null } }),\n },\n fontSize: {\n kind: 'select',\n label: 'Font size',\n options: [\n { value: '', label: 'Size' },\n ...FONT_SIZES.map(f => ({ value: f, label: f.replace('px', '') })),\n ],\n value: s => s.fontSize ?? '',\n command: value => ({ name: 'fontSize', attrs: { size: value || null } }),\n },\n lineHeight: {\n kind: 'select',\n label: 'Line height',\n options: [\n { value: '', label: 'Spacing' },\n { value: '1', label: '1' },\n { value: '1.15', label: '1.15' },\n { value: '1.5', label: '1.5' },\n { value: '2', label: '2' },\n { value: '2.5', label: '2.5' },\n { value: '3', label: '3' },\n ],\n value: s => s.lineHeight ?? '',\n command: value => ({ name: 'lineHeight', attrs: { lineHeight: value || null } }),\n disabled: s => s.inCodeBlock,\n },\n textColor: {\n kind: 'color',\n label: 'Text color',\n glyph: 'A',\n command: 'textColor',\n value: s => s.textColor,\n },\n bgColor: {\n kind: 'color',\n label: 'Highlight color',\n glyph: '✎',\n command: 'bgColor',\n value: s => s.bgColor,\n },\n};\n\n/**\n * Config-driven toolbar. Renders from a single immutable ToolbarState\n * snapshot; every interaction is dispatched to the host as a\n * `wysiwyg-command` event — the toolbar never touches the editor directly.\n *\n * @tag nile-wysiwyg-toolbar\n */\n@customElement('nile-wysiwyg-toolbar')\nexport class NileWysiwygToolbar extends NileElement {\n /** Space-separated item names; `|` inserts a divider. */\n @property({ type: String }) config = DEFAULT_TOOLBAR;\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ attribute: false }) toolbarState?: ToolbarState;\n\n /** Which dropdown/color panel is open (item name), if any. */\n @state() private openMenu: string | null = null;\n\n /** Recently used colors per color command, like nile-rte-color. */\n @state() private recentColors: Record<string, string[]> = {};\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('mousedown', this.handleOutsideClick);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsideClick);\n }\n\n private handleOutsideClick = (event: MouseEvent): void => {\n if (this.openMenu && !event.composedPath().includes(this)) this.openMenu = null;\n };\n\n private toggleMenu(name: string): void {\n this.openMenu = this.openMenu === name ? null : name;\n }\n\n private dispatchCommand(name: CommandName | UiCommandName, attrs?: CommandAttrs): void {\n this.emit('wysiwyg-command', { name, attrs });\n }\n\n /** Wraps a control in the design system's lightweight tooltip (same as\n * the legacy rich text editor's toolbar). */\n private withTooltip(label: string, control: TemplateResult): TemplateResult {\n return html`\n <nile-lite-tooltip content=${label} placement=\"bottom\">${control}</nile-lite-tooltip>\n `;\n }\n\n private renderButton(def: ButtonDef): TemplateResult {\n const state = this.toolbarState;\n const isActive = state && def.active ? def.active(state) : false;\n const isDisabled = this.disabled || (state && def.disabled ? def.disabled(state) : false);\n const icon = isActive && def.iconActive ? def.iconActive : def.icon;\n return this.withTooltip(\n def.label,\n html`\n <button\n type=\"button\"\n class=\"toolbar__button\"\n part=\"button\"\n aria-label=${def.label}\n aria-pressed=${isActive ? 'true' : 'false'}\n ?data-active=${isActive}\n ?disabled=${isDisabled}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.dispatchCommand(def.command, def.attrs)}\n >\n ${icon ? renderGlyph(icon, 18) : def.text}\n </button>\n `\n );\n }\n\n private renderSelect(name: string, def: SelectDef): TemplateResult {\n const value = this.toolbarState ? def.value(this.toolbarState) : '';\n const options =\n typeof def.options === 'function' ? def.options(this.toolbarState) : def.options;\n const current = options.find(opt => opt.value === value) ?? options[0];\n const isDisabled =\n this.disabled ||\n (this.toolbarState && def.disabled ? def.disabled(this.toolbarState) : false);\n const isFont = name === 'fontFamily';\n return html`\n <span class=\"toolbar__dropdown\" part=\"select\">\n ${this.withTooltip(\n def.label,\n html`\n <button\n type=\"button\"\n class=\"toolbar__dd-trigger\"\n aria-label=${def.label}\n aria-expanded=${this.openMenu === name ? 'true' : 'false'}\n ?disabled=${isDisabled}\n style=${isFont && value ? `font-family: ${value}` : ''}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.toggleMenu(name)}\n >\n ${current.label}\n <nile-glyph name=\"arrowdown\" size=\"16\"></nile-glyph>\n </button>\n `\n )}\n ${this.openMenu === name\n ? html`\n <div class=\"toolbar__dd-menu\" @mousedown=${(e: Event) => e.preventDefault()}>\n ${options.map(\n opt => html`\n <div\n class=\"toolbar__dd-item\"\n ?data-active=${opt.value === value}\n style=${isFont && opt.value ? `font-family: ${opt.value}` : ''}\n @click=${() => {\n this.openMenu = null;\n const { name: cmd, attrs } = def.command(opt.value);\n this.dispatchCommand(cmd, attrs);\n }}\n >\n ${opt.label}\n </div>\n `\n )}\n </div>\n `\n : nothing}\n </span>\n `;\n }\n\n private setColor(name: string, def: ColorDef, color: string): void {\n this.openMenu = null;\n const recent = this.recentColors[name] ?? [];\n this.recentColors = {\n ...this.recentColors,\n [name]: [color, ...recent.filter(c => c !== color)].slice(0, 8),\n };\n this.dispatchCommand(def.command, { color });\n }\n\n private renderColor(name: string, def: ColorDef): TemplateResult {\n const current = this.toolbarState ? def.value(this.toolbarState) : null;\n const shown = current ?? '#000000';\n const recent = this.recentColors[name] ?? [];\n const isBg = def.command === 'bgColor';\n return html`\n <span class=\"toolbar__color\" part=\"color\">\n ${this.withTooltip(\n def.label,\n html`\n <button\n type=\"button\"\n class=\"toolbar__button\"\n aria-label=${def.label}\n aria-expanded=${this.openMenu === name ? 'true' : 'false'}\n ?disabled=${this.disabled}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.toggleMenu(name)}\n >\n ${isBg\n ? html`<span class=\"swatch-box\" style=\"background: ${shown}\"></span>`\n : html`\n <span class=\"glyph-stack\">\n <span class=\"glyph\">A</span>\n <span class=\"underline\" style=\"background: ${shown}\"></span>\n </span>\n `}\n </button>\n `\n )}\n ${this.openMenu === name\n ? html`\n <div class=\"toolbar__swatch-panel\" @mousedown=${(e: Event) => e.preventDefault()}>\n <div class=\"section\">\n <div class=\"title\">Default</div>\n <div class=\"swatches\">\n ${COLOR_PALETTE.map(\n color => html`\n <button\n type=\"button\"\n class=\"swatch\"\n style=\"background: ${color}\"\n title=${color}\n @click=${() => this.setColor(name, def, color)}\n >\n ${current === color\n ? html`<span class=\"checkmark\">✓</span>`\n : nothing}\n </button>\n `\n )}\n </div>\n </div>\n ${recent.length\n ? html`\n <div class=\"section\">\n <div class=\"title\">Recently Used</div>\n <div class=\"swatches\">\n ${recent.map(\n color => html`\n <button\n type=\"button\"\n class=\"swatch\"\n style=\"background: ${color}\"\n title=${color}\n @click=${() => this.setColor(name, def, color)}\n ></button>\n `\n )}\n </div>\n </div>\n `\n : nothing}\n <div class=\"section\">\n <div class=\"title\">Custom</div>\n <div class=\"swatches\">\n <button\n type=\"button\"\n class=\"swatch add\"\n @click=${(e: Event) => {\n const input = (e.currentTarget as HTMLElement)\n .closest('.toolbar__color')!\n .querySelector<HTMLInputElement>('input[type=\"color\"]');\n input?.click();\n }}\n >\n +\n </button>\n </div>\n </div>\n </div>\n `\n : nothing}\n <input\n type=\"color\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n .value=${shown}\n @input=${(e: Event) =>\n this.setColor(name, def, (e.target as HTMLInputElement).value)}\n />\n </span>\n `;\n }\n\n private renderItem(name: string): TemplateResult | typeof nothing {\n if (name === 'table') {\n return this.withTooltip(\n 'Insert table',\n html`\n <nile-wysiwyg-table-picker\n part=\"button\"\n ?disabled=${this.disabled}\n ></nile-wysiwyg-table-picker>\n `\n );\n }\n const def = ITEMS[name];\n if (!def) return nothing;\n switch (def.kind) {\n case 'button':\n return this.renderButton(def);\n case 'select':\n return this.renderSelect(name, def);\n case 'color':\n return this.renderColor(name, def);\n default:\n return nothing;\n }\n }\n\n public render(): TemplateResult {\n const groups = this.config\n .split('|')\n .map(group => group.trim().split(/\\s+/).filter(Boolean))\n .filter(group => group.length > 0);\n\n return html`\n <div class=\"toolbar\" part=\"toolbar\" role=\"toolbar\" aria-label=\"Text formatting\">\n ${groups.map(\n (group, index) => html`\n ${index > 0 ? html`<span class=\"toolbar__divider\"></span>` : nothing}\n ${group.map(name => this.renderItem(name))}\n `\n )}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-toolbar': NileWysiwygToolbar;\n }\n}\n"]}
1
+ {"version":3,"file":"nile-wysiwyg-toolbar.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResultArray, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { renderGlyph } from '../../internal/glyph';\nimport { styles } from './nile-wysiwyg-toolbar.css';\nimport type { ToolbarState } from '../engine/selection-state';\nimport type { CommandAttrs, CommandName } from '../engine/commands';\nimport { DEFAULT_TOOLBAR, UiCommandName } from '../types';\nimport '../ui/table-grid-picker';\nimport '../../nile-color-picker/nile-color-picker';\n\ninterface ButtonDef {\n kind: 'button';\n command: CommandName | UiCommandName;\n attrs?: CommandAttrs;\n label: string;\n /** nile-glyph icon name; `text` is the fallback when no glyph exists. */\n icon?: string;\n /** Glyph shown instead of `icon` while the button is active (e.g. fullscreen). */\n iconActive?: string;\n text?: TemplateResult | string;\n active?: (s: ToolbarState) => boolean;\n disabled?: (s: ToolbarState) => boolean;\n}\n\ninterface SelectDef {\n kind: 'select';\n label: string;\n /** Static list, or contextual options derived from the toolbar state. */\n options:\n | { value: string; label: string }[]\n | ((s: ToolbarState | undefined) => { value: string; label: string }[]);\n /** Current value derived from toolbar state ('' = default option). */\n value: (s: ToolbarState) => string;\n /** Maps the chosen option to a command invocation. */\n command: (value: string) => { name: CommandName; attrs?: CommandAttrs };\n disabled?: (s: ToolbarState) => boolean;\n}\n\ninterface ColorDef {\n kind: 'color';\n label: string;\n glyph: string;\n command: CommandName;\n value: (s: ToolbarState) => string | null;\n}\n\ntype ItemDef = ButtonDef | SelectDef | ColorDef;\n\n/**\n * A single control in an author-supplied (light-DOM) toolbar. `name` is a\n * built-in control key (the same names the `config` string accepts) or `'|'`\n * for a group divider; `label`/`icon` optionally override the built-in\n * tooltip/glyph. Produced by the editor from `<nile-wysiwyg-toolbar-item>`\n * children.\n */\nexport interface AuthoredToolbarItem {\n name: string;\n label?: string;\n icon?: string;\n /** When true, the control is placed in the 3-dot overflow menu. */\n overflow?: boolean;\n}\n\n/** Per-instance overrides applied to a built-in control at render time. */\ninterface ItemOverrides {\n label?: string;\n icon?: string;\n}\n\nconst FONT_FAMILIES = [\n 'Arial',\n 'Georgia',\n 'Tahoma',\n 'Times New Roman',\n 'Trebuchet MS',\n 'Verdana',\n 'Courier New',\n];\n\nconst FONT_SIZES = ['10px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '48px'];\n\nconst ITEMS: Record<string, ItemDef> = {\n undo: {\n kind: 'button',\n command: 'undo',\n label: 'Undo (Ctrl+Z)',\n icon: 'undo',\n disabled: s => !s.canUndo,\n },\n redo: {\n kind: 'button',\n command: 'redo',\n label: 'Redo (Ctrl+Y)',\n icon: 'redo',\n disabled: s => !s.canRedo,\n },\n findReplace: {\n kind: 'button',\n command: 'openFind',\n label: 'Find & replace (Ctrl+F)',\n icon: 'ng-text-search',\n },\n bold: {\n kind: 'button',\n command: 'bold',\n label: 'Bold (Ctrl+B)',\n icon: 'format_bold',\n active: s => s.bold,\n },\n italic: {\n kind: 'button',\n command: 'italic',\n label: 'Italic (Ctrl+I)',\n icon: 'format_italic',\n active: s => s.italic,\n },\n underline: {\n kind: 'button',\n command: 'underline',\n label: 'Underline (Ctrl+U)',\n icon: 'format_underline',\n active: s => s.underline,\n },\n strike: {\n kind: 'button',\n command: 'strike',\n label: 'Strikethrough',\n icon: 'ng-strikethrough',\n active: s => s.strike,\n },\n subscript: {\n kind: 'button',\n command: 'subscript',\n label: 'Subscript (Ctrl+,)',\n icon: 'ng-subscript',\n active: s => s.subscript,\n },\n superscript: {\n kind: 'button',\n command: 'superscript',\n label: 'Superscript (Ctrl+.)',\n icon: 'ng-superscript',\n active: s => s.superscript,\n },\n code: {\n kind: 'button',\n command: 'code',\n label: 'Inline code',\n text: '</>',\n active: s => s.code,\n },\n alignLeft: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'left' },\n label: 'Align left',\n icon: 'format_align_left',\n active: s => s.align === 'left',\n },\n alignCenter: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'center' },\n label: 'Align center',\n icon: 'format_align_middle',\n active: s => s.align === 'center',\n },\n alignRight: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'right' },\n label: 'Align right',\n icon: 'format_align_right',\n active: s => s.align === 'right',\n },\n alignJustify: {\n kind: 'button',\n command: 'align',\n attrs: { align: 'justify' },\n label: 'Justify',\n icon: 'format_align_justify',\n active: s => s.align === 'justify',\n },\n bulletList: {\n kind: 'button',\n command: 'bulletList',\n label: 'Bulleted list',\n icon: 'format_list_bulleted',\n active: s => s.inBulletList,\n },\n orderedList: {\n kind: 'button',\n command: 'orderedList',\n label: 'Numbered list',\n icon: 'format_list_numbered',\n active: s => s.inOrderedList,\n },\n taskList: {\n kind: 'button',\n command: 'taskList',\n label: 'Checklist',\n icon: 'ng-list-checks',\n active: s => s.inTaskList,\n },\n indent: {\n kind: 'button',\n command: 'indent',\n label: 'Increase indent (Ctrl+])',\n icon: 'ng-list-indent-increase',\n disabled: s => s.inCodeBlock,\n },\n outdent: {\n kind: 'button',\n command: 'outdent',\n label: 'Decrease indent (Ctrl+[)',\n icon: 'ng-list-indent-decrease',\n disabled: s =>\n !s.inBulletList &&\n !s.inOrderedList &&\n !s.inTaskList &&\n !s.inBlockquote &&\n s.blockIndent === 0,\n },\n listStyle: {\n kind: 'select',\n label: 'List style',\n options: s =>\n s?.inOrderedList\n ? [\n { value: '', label: '1, 2, 3' },\n { value: 'lower-alpha', label: 'a, b, c' },\n { value: 'upper-alpha', label: 'A, B, C' },\n { value: 'lower-roman', label: 'i, ii, iii' },\n { value: 'upper-roman', label: 'I, II, III' },\n { value: 'multilevel', label: '1.1, 1.1.1' },\n ]\n : [\n { value: '', label: '• Disc' },\n { value: 'circle', label: '○ Circle' },\n { value: 'square', label: '▪ Square' },\n ],\n value: s => s.listStyle ?? '',\n command: value => ({ name: 'setListStyle', attrs: { style: value || null } }),\n disabled: s => !s.inBulletList && !s.inOrderedList,\n },\n blockquote: {\n kind: 'button',\n command: 'blockquote',\n label: 'Blockquote',\n text: '❝',\n active: s => s.inBlockquote,\n },\n link: {\n kind: 'button',\n command: 'openLink',\n label: 'Link (Ctrl+K)',\n icon: 'link_2',\n active: s => s.linkActive,\n },\n bookmark: {\n kind: 'button',\n command: 'openBookmark',\n label: 'Insert bookmark (in-text anchor)',\n icon: 'ng-bookmark',\n },\n horizontalRule: {\n kind: 'button',\n command: 'horizontalRule',\n label: 'Horizontal rule',\n icon: 'minus',\n },\n specialChars: {\n kind: 'button',\n command: 'openSpecialChars',\n label: 'Special characters',\n text: 'Ω',\n },\n emoji: {\n kind: 'button',\n command: 'openEmoji',\n label: 'Emoji',\n icon: 'ng-smile',\n },\n codeBlock: {\n kind: 'button',\n command: 'codeBlock',\n label: 'Code block (Ctrl+Alt+C)',\n icon: 'ng-code',\n active: s => s.inCodeBlock,\n },\n image: {\n kind: 'button',\n command: 'openImage',\n label: 'Insert image',\n icon: 'image_2',\n },\n embed: {\n kind: 'button',\n command: 'openEmbed',\n label: 'Embed video (YouTube, Vimeo, Loom)',\n icon: 'ng-video',\n },\n sourceView: {\n kind: 'button',\n command: 'toggleSource',\n label: 'HTML source',\n icon: 'ng-code-xml',\n },\n showBlocks: {\n kind: 'button',\n command: 'toggleShowBlocks',\n label: 'Show blocks',\n icon: 'ng-square-pilcrow',\n active: s => !!s.showBlocks,\n },\n clearFormatting: {\n kind: 'button',\n command: 'clearFormatting',\n label: 'Clear formatting',\n icon: 'format_clear',\n },\n pastePlainText: {\n kind: 'button',\n command: 'togglePastePlainText',\n label: 'Paste as plain text',\n icon: 'ng-clipboard-paste',\n active: s => !!s.pasteAsPlainText,\n },\n fullscreen: {\n kind: 'button',\n command: 'toggleFullscreen',\n label: 'Fullscreen (Esc to exit)',\n icon: 'ng-maximize-2',\n iconActive: 'ng-minimize-2',\n active: s => !!s.fullscreen,\n },\n shortcutHelp: {\n kind: 'button',\n command: 'openShortcutHelp',\n label: 'Keyboard shortcuts (Ctrl+/)',\n icon: 'ng-keyboard',\n },\n exportPdf: {\n kind: 'button',\n command: 'exportPdf',\n label: 'Export to PDF',\n icon: 'ng-printer',\n },\n exportWord: {\n kind: 'button',\n command: 'exportWord',\n label: 'Export to Word',\n icon: 'ng-file-text',\n },\n exportInlineHtml: {\n kind: 'button',\n command: 'exportInlineHtml',\n label: 'Export HTML with inline styles (email)',\n icon: 'ng-file-code',\n },\n importMarkdown: {\n kind: 'button',\n command: 'openMarkdown',\n label: 'Insert from Markdown',\n icon: 'ng-clipboard-paste',\n },\n importWord: {\n kind: 'button',\n command: 'importWord',\n label: 'Import from Word',\n icon: 'ng-file-input',\n },\n formatPainter: {\n kind: 'button',\n command: 'toggleFormatPainter',\n label: 'Format painter (copy formatting)',\n icon: 'ng-paintbrush',\n active: s => !!s.formatPainter,\n },\n caseChange: {\n kind: 'select',\n label: 'Change case',\n options: [\n { value: '', label: 'Case' },\n { value: 'upper', label: 'UPPERCASE' },\n { value: 'lower', label: 'lowercase' },\n { value: 'title', label: 'Title Case' },\n { value: 'sentence', label: 'Sentence case' },\n ],\n value: () => '',\n command: value => ({\n name: 'changeCase',\n attrs: { textCase: (value || 'upper') as 'upper' | 'lower' | 'title' | 'sentence' },\n }),\n disabled: s => s.selectionEmpty,\n },\n mergeField: {\n kind: 'button',\n command: 'openMergeField',\n label: 'Insert merge field',\n icon: 'ng-braces',\n },\n template: {\n kind: 'button',\n command: 'openTemplate',\n label: 'Insert template',\n icon: 'ng-layout-template',\n },\n math: {\n kind: 'button',\n command: 'openMath',\n label: 'Insert math (LaTeX)',\n icon: 'ng-sigma',\n },\n heading: {\n kind: 'select',\n label: 'Paragraph style',\n options: [\n { value: '', label: 'Paragraph' },\n { value: '1', label: 'Heading 1' },\n { value: '2', label: 'Heading 2' },\n { value: '3', label: 'Heading 3' },\n { value: '4', label: 'Heading 4' },\n { value: '5', label: 'Heading 5' },\n { value: '6', label: 'Heading 6' },\n ],\n value: s => (s.headingLevel ? String(s.headingLevel) : ''),\n command: value =>\n value === ''\n ? { name: 'paragraph' }\n : { name: 'heading', attrs: { level: Number(value) } },\n },\n fontFamily: {\n kind: 'select',\n label: 'Font family',\n options: [\n { value: '', label: 'Font' },\n ...FONT_FAMILIES.map(f => ({ value: f, label: f })),\n ],\n value: s => s.fontFamily ?? '',\n command: value => ({ name: 'fontFamily', attrs: { family: value || null } }),\n },\n fontSize: {\n kind: 'select',\n label: 'Font size',\n options: [\n { value: '', label: 'Size' },\n ...FONT_SIZES.map(f => ({ value: f, label: f.replace('px', '') })),\n ],\n value: s => s.fontSize ?? '',\n command: value => ({ name: 'fontSize', attrs: { size: value || null } }),\n },\n lineHeight: {\n kind: 'select',\n label: 'Line height',\n options: [\n { value: '', label: 'Spacing' },\n { value: '1', label: '1' },\n { value: '1.15', label: '1.15' },\n { value: '1.5', label: '1.5' },\n { value: '2', label: '2' },\n { value: '2.5', label: '2.5' },\n { value: '3', label: '3' },\n ],\n value: s => s.lineHeight ?? '',\n command: value => ({ name: 'lineHeight', attrs: { lineHeight: value || null } }),\n disabled: s => s.inCodeBlock,\n },\n textColor: {\n kind: 'color',\n label: 'Text color',\n glyph: 'A',\n command: 'textColor',\n value: s => s.textColor,\n },\n bgColor: {\n kind: 'color',\n label: 'Highlight color',\n glyph: '✎',\n command: 'bgColor',\n value: s => s.bgColor,\n },\n};\n\n/**\n * Config-driven toolbar. Renders from a single immutable ToolbarState\n * snapshot; every interaction is dispatched to the host as a\n * `wysiwyg-command` event — the toolbar never touches the editor directly.\n *\n * @tag nile-wysiwyg-toolbar\n */\n@customElement('nile-wysiwyg-toolbar')\nexport class NileWysiwygToolbar extends NileElement {\n /** Space-separated item names; `|` inserts a divider. */\n @property({ type: String }) config = DEFAULT_TOOLBAR;\n\n /**\n * Structured item list authored in light DOM (from\n * `<nile-wysiwyg-toolbar-item>` children). When set and non-empty it takes\n * precedence over `config`, and each item may override the built-in\n * label/icon.\n */\n @property({ attribute: false }) items?: AuthoredToolbarItem[];\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ attribute: false }) toolbarState?: ToolbarState;\n\n /** Which dropdown/color panel is open (item name), if any. */\n @state() private openMenu: string | null = null;\n\n /** Whether the overflow (\"more\" / 3-dot) menu panel is open. */\n @state() private overflowOpen = false;\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n /**\n * True when this instance is an author's declarative `<nile-wysiwyg-toolbar>`\n * container sitting in an editor's light DOM (holding\n * `<nile-wysiwyg-toolbar-item>` children). Such an instance renders nothing\n * and wires up no listeners — the editor reads the items and renders the real\n * toolbar in its own shadow DOM. The editor's internal instance lives inside\n * a shadow root, so `closest` (which stops at shadow boundaries) never\n * matches it; a standalone toolbar on a page has no editor ancestor either.\n */\n private get isAuthoringContainer(): boolean {\n return !!this.closest('nile-wysiwyg-editor');\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n if (this.isAuthoringContainer) return;\n document.addEventListener('mousedown', this.handleOutsideClick);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('mousedown', this.handleOutsideClick);\n }\n\n private handleOutsideClick = (event: MouseEvent): void => {\n if ((this.openMenu || this.overflowOpen) && !event.composedPath().includes(this)) {\n this.openMenu = null;\n this.overflowOpen = false;\n }\n };\n\n private toggleMenu(name: string): void {\n this.openMenu = this.openMenu === name ? null : name;\n }\n\n private toggleOverflow = (): void => {\n this.overflowOpen = !this.overflowOpen;\n this.openMenu = null;\n };\n\n private dispatchCommand(name: CommandName | UiCommandName, attrs?: CommandAttrs): void {\n // A dispatched command means the user picked an action, so collapse the\n // overflow \"more\" panel (a select/color trigger only opens a submenu — it\n // doesn't dispatch — so it leaves the panel open until a value is chosen).\n this.overflowOpen = false;\n this.emit('wysiwyg-command', { name, attrs });\n }\n\n /** Wraps a control in the design system's lightweight tooltip (same as\n * the legacy rich text editor's toolbar). */\n private withTooltip(label: string, control: TemplateResult): TemplateResult {\n return html`\n <nile-lite-tooltip content=${label} placement=\"top\">${control}</nile-lite-tooltip>\n `;\n }\n\n private renderButton(def: ButtonDef, overrides?: ItemOverrides): TemplateResult {\n const state = this.toolbarState;\n const isActive = state && def.active ? def.active(state) : false;\n const isDisabled = this.disabled || (state && def.disabled ? def.disabled(state) : false);\n const label = overrides?.label ?? def.label;\n const baseIcon = overrides?.icon ?? def.icon;\n const icon = isActive && def.iconActive ? def.iconActive : baseIcon;\n return this.withTooltip(\n label,\n html`\n <button\n type=\"button\"\n class=\"toolbar__button\"\n part=\"button\"\n aria-label=${label}\n aria-pressed=${isActive ? 'true' : 'false'}\n ?data-active=${isActive}\n ?disabled=${isDisabled}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.dispatchCommand(def.command, def.attrs)}\n >\n ${icon ? renderGlyph(icon, 18) : def.text}\n </button>\n `\n );\n }\n\n private renderSelect(name: string, def: SelectDef, overrides?: ItemOverrides): TemplateResult {\n const value = this.toolbarState ? def.value(this.toolbarState) : '';\n const options =\n typeof def.options === 'function' ? def.options(this.toolbarState) : def.options;\n const current = options.find(opt => opt.value === value) ?? options[0];\n const isDisabled =\n this.disabled ||\n (this.toolbarState && def.disabled ? def.disabled(this.toolbarState) : false);\n const isFont = name === 'fontFamily';\n const label = overrides?.label ?? def.label;\n return html`\n <span class=\"toolbar__dropdown\" part=\"select\">\n ${this.withTooltip(\n label,\n html`\n <button\n type=\"button\"\n class=\"toolbar__dd-trigger\"\n aria-label=${label}\n aria-expanded=${this.openMenu === name ? 'true' : 'false'}\n ?disabled=${isDisabled}\n style=${isFont && value ? `font-family: ${value}` : ''}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.toggleMenu(name)}\n >\n ${current.label}\n <nile-glyph name=\"arrowdown\" size=\"16\"></nile-glyph>\n </button>\n `\n )}\n ${this.openMenu === name\n ? html`\n <div class=\"toolbar__dd-menu\" @mousedown=${(e: Event) => e.preventDefault()}>\n ${options.map(\n opt => html`\n <div\n class=\"toolbar__dd-item\"\n ?data-active=${opt.value === value}\n style=${isFont && opt.value ? `font-family: ${opt.value}` : ''}\n @click=${() => {\n this.openMenu = null;\n const { name: cmd, attrs } = def.command(opt.value);\n this.dispatchCommand(cmd, attrs);\n }}\n >\n ${opt.label}\n </div>\n `\n )}\n </div>\n `\n : nothing}\n </span>\n `;\n }\n\n private setColor(def: ColorDef, color: string): void {\n // nile-color-picker emits 'none' for the \"No Fill\" action; an empty color\n // clears the mark in the command engine.\n this.dispatchCommand(def.command, { color: color === 'none' ? '' : color });\n }\n\n private renderColor(name: string, def: ColorDef, overrides?: ItemOverrides): TemplateResult {\n const current = this.toolbarState ? def.value(this.toolbarState) : null;\n const shown = current ?? '#000000';\n const isBg = def.command === 'bgColor';\n const label = overrides?.label ?? def.label;\n return html`\n <span class=\"toolbar__color\" part=\"color\">\n ${this.withTooltip(\n label,\n html`\n <button\n type=\"button\"\n class=\"toolbar__button\"\n aria-label=${label}\n aria-expanded=${this.openMenu === name ? 'true' : 'false'}\n ?disabled=${this.disabled}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.toggleMenu(name)}\n >\n ${isBg\n ? html`<span class=\"swatch-box\" style=\"background: ${shown}\"></span>`\n : html`\n <span class=\"glyph-stack\">\n <span class=\"glyph\">A</span>\n <span class=\"underline\" style=\"background: ${shown}\"></span>\n </span>\n `}\n </button>\n `\n )}\n ${this.openMenu === name\n ? html`\n <div class=\"toolbar__color-panel\">\n <nile-color-picker\n mode=\"inline\"\n type=\"swatches\"\n .noFill=${isBg}\n .value=${shown}\n @nile-change=${(e: CustomEvent<{ value: string }>) =>\n this.setColor(def, e.detail.value)}\n ></nile-color-picker>\n </div>\n `\n : nothing}\n </span>\n `;\n }\n\n private renderItem(name: string, overrides?: ItemOverrides): TemplateResult | typeof nothing {\n if (name === 'table') {\n return this.withTooltip(\n overrides?.label ?? 'Insert table',\n html`\n <nile-wysiwyg-table-picker\n part=\"button\"\n ?disabled=${this.disabled}\n ></nile-wysiwyg-table-picker>\n `\n );\n }\n const def = ITEMS[name];\n if (!def) return nothing;\n switch (def.kind) {\n case 'button':\n return this.renderButton(def, overrides);\n case 'select':\n return this.renderSelect(name, def, overrides);\n case 'color':\n return this.renderColor(name, def, overrides);\n default:\n return nothing;\n }\n }\n\n /** Parses the `config` string into a flat token list, keeping the `|`\n * (divider) and `>>` (overflow) markers as items. */\n private itemsFromConfig(config: string): AuthoredToolbarItem[] {\n return config\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .map(name => ({ name }));\n }\n\n /** Splits a flat item list into groups, breaking on `'|'` dividers. */\n private groupItems(items: AuthoredToolbarItem[]): AuthoredToolbarItem[][] {\n const groups: AuthoredToolbarItem[][] = [[]];\n for (const item of items) {\n if (item.name === '|') {\n if (groups[groups.length - 1].length) groups.push([]);\n continue;\n }\n groups[groups.length - 1].push(item);\n }\n return groups.filter(group => group.length > 0);\n }\n\n /** Partitions the flat item list into the always-visible main groups and the\n * overflow (3-dot menu) groups. Two forms are supported: a positional `>>`\n * token in the `config` string (everything after it overflows), or a\n * per-item `overflow` flag on authored items (each flagged item overflows,\n * wherever it sits). Without either, everything stays on the main bar. */\n private partitionGroups(items: AuthoredToolbarItem[]): {\n main: AuthoredToolbarItem[][];\n overflow: AuthoredToolbarItem[][];\n } {\n const at = items.findIndex(item => item.name === '>>');\n if (at !== -1) {\n return {\n main: this.groupItems(items.slice(0, at)),\n overflow: this.groupItems(items.slice(at + 1)),\n };\n }\n if (!items.some(item => item.overflow)) {\n return { main: this.groupItems(items), overflow: [] };\n }\n return {\n main: this.groupItems(items.filter(item => !item.overflow)),\n overflow: this.groupItems(items.filter(item => item.overflow)),\n };\n }\n\n /** Renders the trailing 3-dot \"more\" button and its collapsible panel that\n * hosts the overflow groups (everything after `>>` in the config). The panel\n * drops directly beneath the button, wherever the button sits in the bar. */\n private renderOverflow(hasMain: boolean, groups: AuthoredToolbarItem[][]): TemplateResult {\n const open = this.overflowOpen;\n return html`\n ${hasMain ? html`<span class=\"toolbar__divider\"></span>` : nothing}\n <span class=\"toolbar__overflow\" part=\"overflow\">\n ${this.withTooltip(\n 'More',\n html`\n <button\n type=\"button\"\n class=\"toolbar__button\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n aria-expanded=${open ? 'true' : 'false'}\n ?data-active=${open}\n ?disabled=${this.disabled}\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${this.toggleOverflow}\n >\n ${renderGlyph('ng-dots-vertical', 18)}\n </button>\n `\n )}\n ${open\n ? html`\n <div\n class=\"toolbar__overflow-panel\"\n part=\"overflow-panel\"\n @mousedown=${(e: Event) => e.preventDefault()}\n >\n ${groups.map(\n (group, index) => html`\n ${index > 0\n ? html`<span class=\"toolbar__overflow-divider\"></span>`\n : nothing}\n ${group.map(item =>\n this.renderItem(item.name, { label: item.label, icon: item.icon })\n )}\n `\n )}\n </div>\n `\n : nothing}\n </span>\n `;\n }\n\n public render(): TemplateResult {\n // A declarative container in an editor's light DOM only carries authored\n // <nile-wysiwyg-toolbar-item> children; the editor renders the real bar.\n if (this.isAuthoringContainer) return html``;\n\n const items =\n this.items && this.items.length ? this.items : this.itemsFromConfig(this.config);\n const { main, overflow } = this.partitionGroups(items);\n\n return html`\n <div class=\"toolbar\" part=\"toolbar\" role=\"toolbar\" aria-label=\"Text formatting\">\n ${main.map(\n (group, index) => html`\n ${index > 0 ? html`<span class=\"toolbar__divider\"></span>` : nothing}\n ${group.map(item =>\n this.renderItem(item.name, { label: item.label, icon: item.icon })\n )}\n `\n )}\n ${overflow.length ? this.renderOverflow(main.length > 0, overflow) : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-toolbar': NileWysiwygToolbar;\n }\n}\n"]}
@@ -1,8 +1,10 @@
1
1
  import type { CommandAttrs, CommandName } from './engine/commands';
2
2
  /**
3
3
  * Toolbar configuration. The string form uses space-separated item names with
4
- * `|` as a group divider, e.g. `"bold italic | heading | link"`. `"none"`
5
- * hides the toolbar entirely.
4
+ * `|` as a group divider, e.g. `"bold italic | heading | link"`. A `>>` marker
5
+ * moves every item after it into a collapsible 3-dot "more" menu, e.g.
6
+ * `"bold italic | heading >> link image | sourceView"`. `"none"` hides the
7
+ * toolbar entirely.
6
8
  */
7
9
  export type ToolbarConfig = string;
8
10
  /** Pseudo-commands handled by the host chrome rather than the registry. */
@@ -1,8 +1,8 @@
1
1
  export const DEFAULT_TOOLBAR = 'undo redo findReplace | heading | bold italic underline strike subscript superscript | fontFamily fontSize lineHeight | ' +
2
2
  'textColor bgColor | alignLeft alignCenter alignRight alignJustify | ' +
3
3
  'bulletList orderedList taskList listStyle indent outdent blockquote | ' +
4
- 'link bookmark table image embed codeBlock math horizontalRule specialChars emoji | ' +
5
- 'mergeField template | ' +
4
+ 'link bookmark table image embed codeBlock math horizontalRule specialChars emoji ' +
5
+ '>> mergeField template | ' +
6
6
  'formatPainter caseChange clearFormatting pastePlainText showBlocks sourceView | ' +
7
7
  'importMarkdown importWord exportInlineHtml exportWord exportPdf | shortcutHelp fullscreen';
8
8
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/nile-wysiwyg-editor/types.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAC,MAAM,eAAe,GAC1B,0HAA0H;IAC1H,sEAAsE;IACtE,wEAAwE;IACxE,qFAAqF;IACrF,wBAAwB;IACxB,kFAAkF;IAClF,2FAA2F,CAAC","sourcesContent":["import type { CommandAttrs, CommandName } from './engine/commands';\n\n/**\n * Toolbar configuration. The string form uses space-separated item names with\n * `|` as a group divider, e.g. `\"bold italic | heading | link\"`. `\"none\"`\n * hides the toolbar entirely.\n */\nexport type ToolbarConfig = string;\n\n/** Pseudo-commands handled by the host chrome rather than the registry. */\nexport type UiCommandName =\n | 'openLink'\n | 'openImage'\n | 'openEmbed'\n | 'openBookmark'\n | 'toggleSource'\n | 'togglePastePlainText'\n | 'toggleFullscreen'\n | 'toggleShowBlocks'\n | 'openShortcutHelp'\n | 'openSpecialChars'\n | 'openEmoji'\n | 'openFind'\n | 'exportPdf'\n | 'exportWord'\n | 'exportInlineHtml'\n | 'importWord'\n | 'toggleFormatPainter'\n | 'openMergeField'\n | 'openTemplate'\n | 'openMath'\n | 'openMarkdown';\n\n/** Detail payload of the internal `wysiwyg-command` event (toolbar → host). */\nexport interface WysiwygCommandDetail {\n name: CommandName | UiCommandName;\n attrs?: CommandAttrs;\n}\n\n/** Mention configuration: trigger character → items. Same shape as the\n * legacy nile-rich-text-editor. */\nexport type MentionsConfig = Record<string, { key: string; label: string }[]>;\n\n/** Reusable content snippet, offered through the \"/\" menu. */\nexport interface SnippetConfig {\n key: string;\n label: string;\n html: string;\n}\n\n/** A mail-merge / personalization placeholder offered in the merge-field picker. */\nexport interface MergeFieldConfig {\n /** Stable identifier substituted at render time (e.g. `first_name`). */\n id: string;\n /** Human-readable label shown in the chip and picker. */\n label: string;\n}\n\n/** A predefined content structure offered in the template picker. */\nexport interface TemplateConfig {\n label: string;\n /** Optional secondary line shown under the label in the picker. */\n description?: string;\n /** HTML inserted at the cursor when chosen. */\n html: string;\n}\n\n/** Detail payload of `nile-change` / `nile-input`. */\nexport interface WysiwygChangeDetail {\n value: string;\n json: Record<string, unknown>;\n /** Alias of `value` for drop-in parity with nile-rich-text-editor. */\n content: string;\n}\n\nexport const DEFAULT_TOOLBAR =\n 'undo redo findReplace | heading | bold italic underline strike subscript superscript | fontFamily fontSize lineHeight | ' +\n 'textColor bgColor | alignLeft alignCenter alignRight alignJustify | ' +\n 'bulletList orderedList taskList listStyle indent outdent blockquote | ' +\n 'link bookmark table image embed codeBlock math horizontalRule specialChars emoji | ' +\n 'mergeField template | ' +\n 'formatPainter caseChange clearFormatting pastePlainText showBlocks sourceView | ' +\n 'importMarkdown importWord exportInlineHtml exportWord exportPdf | shortcutHelp fullscreen';\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/nile-wysiwyg-editor/types.ts"],"names":[],"mappings":"AA6EA,MAAM,CAAC,MAAM,eAAe,GAC1B,0HAA0H;IAC1H,sEAAsE;IACtE,wEAAwE;IACxE,mFAAmF;IACnF,2BAA2B;IAC3B,kFAAkF;IAClF,2FAA2F,CAAC","sourcesContent":["import type { CommandAttrs, CommandName } from './engine/commands';\n\n/**\n * Toolbar configuration. The string form uses space-separated item names with\n * `|` as a group divider, e.g. `\"bold italic | heading | link\"`. A `>>` marker\n * moves every item after it into a collapsible 3-dot \"more\" menu, e.g.\n * `\"bold italic | heading >> link image | sourceView\"`. `\"none\"` hides the\n * toolbar entirely.\n */\nexport type ToolbarConfig = string;\n\n/** Pseudo-commands handled by the host chrome rather than the registry. */\nexport type UiCommandName =\n | 'openLink'\n | 'openImage'\n | 'openEmbed'\n | 'openBookmark'\n | 'toggleSource'\n | 'togglePastePlainText'\n | 'toggleFullscreen'\n | 'toggleShowBlocks'\n | 'openShortcutHelp'\n | 'openSpecialChars'\n | 'openEmoji'\n | 'openFind'\n | 'exportPdf'\n | 'exportWord'\n | 'exportInlineHtml'\n | 'importWord'\n | 'toggleFormatPainter'\n | 'openMergeField'\n | 'openTemplate'\n | 'openMath'\n | 'openMarkdown';\n\n/** Detail payload of the internal `wysiwyg-command` event (toolbar → host). */\nexport interface WysiwygCommandDetail {\n name: CommandName | UiCommandName;\n attrs?: CommandAttrs;\n}\n\n/** Mention configuration: trigger character → items. Same shape as the\n * legacy nile-rich-text-editor. */\nexport type MentionsConfig = Record<string, { key: string; label: string }[]>;\n\n/** Reusable content snippet, offered through the \"/\" menu. */\nexport interface SnippetConfig {\n key: string;\n label: string;\n html: string;\n}\n\n/** A mail-merge / personalization placeholder offered in the merge-field picker. */\nexport interface MergeFieldConfig {\n /** Stable identifier substituted at render time (e.g. `first_name`). */\n id: string;\n /** Human-readable label shown in the chip and picker. */\n label: string;\n}\n\n/** A predefined content structure offered in the template picker. */\nexport interface TemplateConfig {\n label: string;\n /** Optional secondary line shown under the label in the picker. */\n description?: string;\n /** HTML inserted at the cursor when chosen. */\n html: string;\n}\n\n/** Detail payload of `nile-change` / `nile-input`. */\nexport interface WysiwygChangeDetail {\n value: string;\n json: Record<string, unknown>;\n /** Alias of `value` for drop-in parity with nile-rich-text-editor. */\n content: string;\n}\n\nexport const DEFAULT_TOOLBAR =\n 'undo redo findReplace | heading | bold italic underline strike subscript superscript | fontFamily fontSize lineHeight | ' +\n 'textColor bgColor | alignLeft alignCenter alignRight alignJustify | ' +\n 'bulletList orderedList taskList listStyle indent outdent blockquote | ' +\n 'link bookmark table image embed codeBlock math horizontalRule specialChars emoji ' +\n '>> mergeField template | ' +\n 'formatPainter caseChange clearFormatting pastePlainText showBlocks sourceView | ' +\n 'importMarkdown importWord exportInlineHtml exportWord exportPdf | shortcutHelp fullscreen';\n"]}
@@ -0,0 +1,48 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Declarative, light-DOM marker for a single selection bubble-menu control.
4
+ *
5
+ * Author these as children of `<nile-wysiwyg-editor>` to build the bubble menu
6
+ * shown over a text selection by hand, instead of the built-in five
7
+ * (bold / italic / underline / strike / link) — the same pattern as
8
+ * `<nile-wysiwyg-toolbar-item>`:
9
+ *
10
+ * ```html
11
+ * <nile-wysiwyg-editor bubble-menu>
12
+ * <nile-wysiwyg-bubble-item name="bold"></nile-wysiwyg-bubble-item>
13
+ * <nile-wysiwyg-bubble-item name="italic"></nile-wysiwyg-bubble-item>
14
+ * <nile-wysiwyg-bubble-item divider></nile-wysiwyg-bubble-item>
15
+ * <nile-wysiwyg-bubble-item name="link" label="Add link"></nile-wysiwyg-bubble-item>
16
+ * </nile-wysiwyg-editor>
17
+ * ```
18
+ *
19
+ * `name` maps to a built-in control (`bold`, `italic`, `underline`, `strike`,
20
+ * `code`, `subscript`, `superscript`, `link`, `bulletList`, `orderedList`,
21
+ * `alignLeft`, `alignCenter`, `alignRight`, `clearFormatting`). `label` and
22
+ * `icon` override the built-in tooltip/glyph; set `divider` for a separator.
23
+ *
24
+ * Any other `name` is dispatched as a raw `wysiwyg-command` (so custom editor
25
+ * commands work) as long as an `icon` is supplied.
26
+ *
27
+ * The element renders nothing itself — the editor discovers it and renders the
28
+ * real control inside the bubble menu's shadow DOM.
29
+ *
30
+ * @tag nile-wysiwyg-bubble-item
31
+ */
32
+ export declare class NileWysiwygBubbleItem extends LitElement {
33
+ protected createRenderRoot(): this;
34
+ protected shouldUpdate(): boolean;
35
+ /** Built-in control name, or a raw command name when paired with `icon`. */
36
+ name: string;
37
+ /** Overrides the control's tooltip / accessible label. */
38
+ label: string;
39
+ /** Overrides the control's glyph (a `nile-glyph` name). */
40
+ icon: string;
41
+ /** Renders a separator instead of a control. */
42
+ divider: boolean;
43
+ }
44
+ declare global {
45
+ interface HTMLElementTagNameMap {
46
+ 'nile-wysiwyg-bubble-item': NileWysiwygBubbleItem;
47
+ }
48
+ }
@@ -0,0 +1,69 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ /**
5
+ * Declarative, light-DOM marker for a single selection bubble-menu control.
6
+ *
7
+ * Author these as children of `<nile-wysiwyg-editor>` to build the bubble menu
8
+ * shown over a text selection by hand, instead of the built-in five
9
+ * (bold / italic / underline / strike / link) — the same pattern as
10
+ * `<nile-wysiwyg-toolbar-item>`:
11
+ *
12
+ * ```html
13
+ * <nile-wysiwyg-editor bubble-menu>
14
+ * <nile-wysiwyg-bubble-item name="bold"></nile-wysiwyg-bubble-item>
15
+ * <nile-wysiwyg-bubble-item name="italic"></nile-wysiwyg-bubble-item>
16
+ * <nile-wysiwyg-bubble-item divider></nile-wysiwyg-bubble-item>
17
+ * <nile-wysiwyg-bubble-item name="link" label="Add link"></nile-wysiwyg-bubble-item>
18
+ * </nile-wysiwyg-editor>
19
+ * ```
20
+ *
21
+ * `name` maps to a built-in control (`bold`, `italic`, `underline`, `strike`,
22
+ * `code`, `subscript`, `superscript`, `link`, `bulletList`, `orderedList`,
23
+ * `alignLeft`, `alignCenter`, `alignRight`, `clearFormatting`). `label` and
24
+ * `icon` override the built-in tooltip/glyph; set `divider` for a separator.
25
+ *
26
+ * Any other `name` is dispatched as a raw `wysiwyg-command` (so custom editor
27
+ * commands work) as long as an `icon` is supplied.
28
+ *
29
+ * The element renders nothing itself — the editor discovers it and renders the
30
+ * real control inside the bubble menu's shadow DOM.
31
+ *
32
+ * @tag nile-wysiwyg-bubble-item
33
+ */
34
+ let NileWysiwygBubbleItem = class NileWysiwygBubbleItem extends LitElement {
35
+ constructor() {
36
+ super(...arguments);
37
+ /** Built-in control name, or a raw command name when paired with `icon`. */
38
+ this.name = '';
39
+ /** Overrides the control's tooltip / accessible label. */
40
+ this.label = '';
41
+ /** Overrides the control's glyph (a `nile-glyph` name). */
42
+ this.icon = '';
43
+ /** Renders a separator instead of a control. */
44
+ this.divider = false;
45
+ }
46
+ createRenderRoot() {
47
+ return this;
48
+ }
49
+ shouldUpdate() {
50
+ return false;
51
+ }
52
+ };
53
+ __decorate([
54
+ property({ type: String, reflect: true })
55
+ ], NileWysiwygBubbleItem.prototype, "name", void 0);
56
+ __decorate([
57
+ property({ type: String, reflect: true })
58
+ ], NileWysiwygBubbleItem.prototype, "label", void 0);
59
+ __decorate([
60
+ property({ type: String, reflect: true })
61
+ ], NileWysiwygBubbleItem.prototype, "icon", void 0);
62
+ __decorate([
63
+ property({ type: Boolean, reflect: true })
64
+ ], NileWysiwygBubbleItem.prototype, "divider", void 0);
65
+ NileWysiwygBubbleItem = __decorate([
66
+ customElement('nile-wysiwyg-bubble-item')
67
+ ], NileWysiwygBubbleItem);
68
+ export { NileWysiwygBubbleItem };
69
+ //# sourceMappingURL=bubble-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble-item.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/bubble-item.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEI,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAA9C;;QAQL,4EAA4E;QACjC,SAAI,GAAG,EAAE,CAAC;QAErD,0DAA0D;QACf,UAAK,GAAG,EAAE,CAAC;QAEtD,2DAA2D;QAChB,SAAI,GAAG,EAAE,CAAC;QAErD,gDAAgD;QACJ,YAAO,GAAG,KAAK,CAAC;IAC9D,CAAC;IAlBW,gBAAgB;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACS,YAAY;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;CAaF,CAAA;AAV4C;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAAW;AAGV;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oDAAY;AAGX;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAAW;AAGT;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sDAAiB;AAlBjD,qBAAqB;IADjC,aAAa,CAAC,0BAA0B,CAAC;GAC7B,qBAAqB,CAmBjC","sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n/**\n * Declarative, light-DOM marker for a single selection bubble-menu control.\n *\n * Author these as children of `<nile-wysiwyg-editor>` to build the bubble menu\n * shown over a text selection by hand, instead of the built-in five\n * (bold / italic / underline / strike / link) — the same pattern as\n * `<nile-wysiwyg-toolbar-item>`:\n *\n * ```html\n * <nile-wysiwyg-editor bubble-menu>\n * <nile-wysiwyg-bubble-item name=\"bold\"></nile-wysiwyg-bubble-item>\n * <nile-wysiwyg-bubble-item name=\"italic\"></nile-wysiwyg-bubble-item>\n * <nile-wysiwyg-bubble-item divider></nile-wysiwyg-bubble-item>\n * <nile-wysiwyg-bubble-item name=\"link\" label=\"Add link\"></nile-wysiwyg-bubble-item>\n * </nile-wysiwyg-editor>\n * ```\n *\n * `name` maps to a built-in control (`bold`, `italic`, `underline`, `strike`,\n * `code`, `subscript`, `superscript`, `link`, `bulletList`, `orderedList`,\n * `alignLeft`, `alignCenter`, `alignRight`, `clearFormatting`). `label` and\n * `icon` override the built-in tooltip/glyph; set `divider` for a separator.\n *\n * Any other `name` is dispatched as a raw `wysiwyg-command` (so custom editor\n * commands work) as long as an `icon` is supplied.\n *\n * The element renders nothing itself — the editor discovers it and renders the\n * real control inside the bubble menu's shadow DOM.\n *\n * @tag nile-wysiwyg-bubble-item\n */\n@customElement('nile-wysiwyg-bubble-item')\nexport class NileWysiwygBubbleItem extends LitElement {\n protected createRenderRoot(): this {\n return this;\n }\n protected shouldUpdate(): boolean {\n return false;\n }\n\n /** Built-in control name, or a raw command name when paired with `icon`. */\n @property({ type: String, reflect: true }) name = '';\n\n /** Overrides the control's tooltip / accessible label. */\n @property({ type: String, reflect: true }) label = '';\n\n /** Overrides the control's glyph (a `nile-glyph` name). */\n @property({ type: String, reflect: true }) icon = '';\n\n /** Renders a separator instead of a control. */\n @property({ type: Boolean, reflect: true }) divider = false;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-bubble-item': NileWysiwygBubbleItem;\n }\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import { TemplateResult, CSSResultArray } from 'lit';
2
2
  import NileElement from '../../internal/nile-element';
3
3
  import type { ToolbarState } from '../engine/selection-state';
4
+ import type { AuthoredToolbarItem } from '../nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';
5
+ import '../../nile-lite-tooltip/nile-lite-tooltip';
4
6
  /**
5
7
  * Balloon toolbar shown over non-empty selections. The host owns positioning
6
8
  * (absolute left/top) and visibility; commands bubble up as
@@ -9,10 +11,23 @@ import type { ToolbarState } from '../engine/selection-state';
9
11
  export declare class NileWysiwygBubbleMenu extends NileElement {
10
12
  open: boolean;
11
13
  toolbarState?: ToolbarState;
14
+ /**
15
+ * Structured item list authored in light DOM (from
16
+ * `<nile-wysiwyg-bubble-item>` children). `'|'` is a separator. Falls back to
17
+ * {@link DEFAULT_BUBBLE} when empty.
18
+ */
19
+ items?: AuthoredToolbarItem[];
12
20
  static get styles(): CSSResultArray;
13
- /** Same icon set as the main toolbar, so both surfaces look identical. */
14
- private items;
21
+ /**
22
+ * True when this instance is an author's declarative `<nile-wysiwyg-bubble-menu>`
23
+ * container in an editor's light DOM (holding `<nile-wysiwyg-bubble-item>`
24
+ * children). It renders nothing — the editor reads the items and renders the
25
+ * real bubble menu in its own shadow DOM. The editor's internal instance
26
+ * lives in a shadow root, so `closest` never matches it.
27
+ */
28
+ private get isAuthoringContainer();
15
29
  render(): TemplateResult;
30
+ private renderEntry;
16
31
  }
17
32
  declare global {
18
33
  interface HTMLElementTagNameMap {