@aquera/nile-elements 2.0.0 → 2.0.2

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 (238) hide show
  1. package/README.md +11 -0
  2. package/demo/nxtgen-dark.css +2 -2
  3. package/dist/{index-ccff99d6.esm.js → index-0fe57384.esm.js} +1 -1
  4. package/dist/index-f6944844.cjs.js +2 -0
  5. package/dist/{index-e43755f5.cjs.js.map → index-f6944844.cjs.js.map} +1 -1
  6. package/dist/index.cjs.js +1 -1
  7. package/dist/index.esm.js +1 -1
  8. package/dist/index.js +1127 -741
  9. package/dist/nile-code-editor/extensionSetup.cjs.js +1 -1
  10. package/dist/nile-code-editor/extensionSetup.esm.js +1 -1
  11. package/dist/nile-code-editor/index.cjs.js +1 -1
  12. package/dist/nile-code-editor/index.esm.js +1 -1
  13. package/dist/nile-code-editor/nile-code-editor.cjs.js +2 -2
  14. package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
  15. package/dist/nile-code-editor/nile-code-editor.css.cjs.js +1 -1
  16. package/dist/nile-code-editor/nile-code-editor.css.cjs.js.map +1 -1
  17. package/dist/nile-code-editor/nile-code-editor.css.esm.js +2 -2
  18. package/dist/nile-code-editor/nile-code-editor.esm.js +4 -4
  19. package/dist/nile-code-editor/theme.cjs.js +1 -1
  20. package/dist/nile-code-editor/theme.cjs.js.map +1 -1
  21. package/dist/nile-code-editor/theme.esm.js +1 -1
  22. package/dist/nile-combobox/nile-combobox.css.cjs.js +1 -1
  23. package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -1
  24. package/dist/nile-combobox/nile-combobox.css.esm.js +1 -1
  25. package/dist/nile-detail/nile-detail.css.cjs.js +1 -1
  26. package/dist/nile-detail/nile-detail.css.cjs.js.map +1 -1
  27. package/dist/nile-detail/nile-detail.css.esm.js +1 -1
  28. package/dist/nile-side-bar-footer/nile-side-bar-footer.css.cjs.js +1 -1
  29. package/dist/nile-side-bar-footer/nile-side-bar-footer.css.cjs.js.map +1 -1
  30. package/dist/nile-side-bar-footer/nile-side-bar-footer.css.esm.js +3 -3
  31. package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.cjs.js +1 -1
  32. package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.cjs.js.map +1 -1
  33. package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.css.esm.js +13 -7
  34. package/dist/nile-timestamp-builder/index.cjs.js +2 -0
  35. package/dist/nile-timestamp-builder/index.cjs.js.map +1 -0
  36. package/dist/nile-timestamp-builder/index.esm.js +1 -0
  37. package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.cjs.js +2 -0
  38. package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.cjs.js.map +1 -0
  39. package/dist/nile-timestamp-builder/nile-timestamp-builder-utils.esm.js +1 -0
  40. package/dist/nile-timestamp-builder/nile-timestamp-builder.cjs.js +2 -0
  41. package/dist/nile-timestamp-builder/nile-timestamp-builder.cjs.js.map +1 -0
  42. package/dist/nile-timestamp-builder/nile-timestamp-builder.css.cjs.js +2 -0
  43. package/dist/nile-timestamp-builder/nile-timestamp-builder.css.cjs.js.map +1 -0
  44. package/dist/nile-timestamp-builder/nile-timestamp-builder.css.esm.js +195 -0
  45. package/dist/nile-timestamp-builder/nile-timestamp-builder.esm.js +154 -0
  46. package/dist/nile-timestamp-builder/timezones.cjs.js +2 -0
  47. package/dist/nile-timestamp-builder/timezones.cjs.js.map +1 -0
  48. package/dist/nile-timestamp-builder/timezones.esm.js +1 -0
  49. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
  50. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js.map +1 -1
  51. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js +1 -1
  52. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.cjs.js.map +1 -1
  53. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.css.esm.js +91 -58
  54. package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +1 -1
  55. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js +1 -1
  56. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.cjs.js.map +1 -1
  57. package/dist/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.esm.js +19 -19
  58. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js +1 -1
  59. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.cjs.js.map +1 -1
  60. package/dist/nile-wysiwyg-editor/ui/bookmark-panel.esm.js +14 -14
  61. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js +1 -1
  62. package/dist/nile-wysiwyg-editor/ui/bubble-menu.cjs.js.map +1 -1
  63. package/dist/nile-wysiwyg-editor/ui/bubble-menu.esm.js +13 -13
  64. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
  65. package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js.map +1 -1
  66. package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +12 -12
  67. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js +1 -1
  68. package/dist/nile-wysiwyg-editor/ui/embed-menu.cjs.js.map +1 -1
  69. package/dist/nile-wysiwyg-editor/ui/embed-menu.esm.js +10 -10
  70. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js +1 -1
  71. package/dist/nile-wysiwyg-editor/ui/embed-panel.cjs.js.map +1 -1
  72. package/dist/nile-wysiwyg-editor/ui/embed-panel.esm.js +4 -4
  73. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js +1 -1
  74. package/dist/nile-wysiwyg-editor/ui/emoji-picker.cjs.js.map +1 -1
  75. package/dist/nile-wysiwyg-editor/ui/emoji-picker.esm.js +11 -11
  76. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js +1 -1
  77. package/dist/nile-wysiwyg-editor/ui/find-replace.cjs.js.map +1 -1
  78. package/dist/nile-wysiwyg-editor/ui/find-replace.esm.js +9 -9
  79. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js +1 -1
  80. package/dist/nile-wysiwyg-editor/ui/image-menu.cjs.js.map +1 -1
  81. package/dist/nile-wysiwyg-editor/ui/image-menu.esm.js +11 -11
  82. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js +1 -1
  83. package/dist/nile-wysiwyg-editor/ui/image-panel.cjs.js.map +1 -1
  84. package/dist/nile-wysiwyg-editor/ui/image-panel.esm.js +6 -6
  85. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js +1 -1
  86. package/dist/nile-wysiwyg-editor/ui/insert-menu.cjs.js.map +1 -1
  87. package/dist/nile-wysiwyg-editor/ui/insert-menu.esm.js +14 -14
  88. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js +1 -1
  89. package/dist/nile-wysiwyg-editor/ui/link-editor.cjs.js.map +1 -1
  90. package/dist/nile-wysiwyg-editor/ui/link-editor.esm.js +16 -16
  91. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js +1 -1
  92. package/dist/nile-wysiwyg-editor/ui/markdown-panel.cjs.js.map +1 -1
  93. package/dist/nile-wysiwyg-editor/ui/markdown-panel.esm.js +8 -8
  94. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js +1 -1
  95. package/dist/nile-wysiwyg-editor/ui/math-panel.cjs.js.map +1 -1
  96. package/dist/nile-wysiwyg-editor/ui/math-panel.esm.js +4 -4
  97. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js +1 -1
  98. package/dist/nile-wysiwyg-editor/ui/shortcut-help.cjs.js.map +1 -1
  99. package/dist/nile-wysiwyg-editor/ui/shortcut-help.esm.js +16 -16
  100. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
  101. package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js.map +1 -1
  102. package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +29 -29
  103. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js +1 -1
  104. package/dist/nile-wysiwyg-editor/ui/special-chars.cjs.js.map +1 -1
  105. package/dist/nile-wysiwyg-editor/ui/special-chars.esm.js +8 -8
  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 +23 -23
  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 +7 -7
  115. package/dist/src/index.d.ts +1 -0
  116. package/dist/src/index.js +1 -0
  117. package/dist/src/index.js.map +1 -1
  118. package/dist/src/nile-code-editor/nile-code-editor.css.js +2 -2
  119. package/dist/src/nile-code-editor/nile-code-editor.css.js.map +1 -1
  120. package/dist/src/nile-code-editor/nile-code-editor.d.ts +15 -0
  121. package/dist/src/nile-code-editor/nile-code-editor.js +65 -6
  122. package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
  123. package/dist/src/nile-code-editor/theme.d.ts +6 -117
  124. package/dist/src/nile-code-editor/theme.js +100 -147
  125. package/dist/src/nile-code-editor/theme.js.map +1 -1
  126. package/dist/src/nile-combobox/nile-combobox.css.js +1 -1
  127. package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -1
  128. package/dist/src/nile-detail/nile-detail.css.js +1 -1
  129. package/dist/src/nile-detail/nile-detail.css.js.map +1 -1
  130. package/dist/src/nile-side-bar-footer/nile-side-bar-footer.css.js +3 -3
  131. package/dist/src/nile-side-bar-footer/nile-side-bar-footer.css.js.map +1 -1
  132. package/dist/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.js +11 -5
  133. package/dist/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.js.map +1 -1
  134. package/dist/src/nile-timestamp-builder/index.d.ts +1 -0
  135. package/dist/src/nile-timestamp-builder/index.js +2 -0
  136. package/dist/src/nile-timestamp-builder/index.js.map +1 -0
  137. package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.d.ts +54 -0
  138. package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.js +254 -0
  139. package/dist/src/nile-timestamp-builder/nile-timestamp-builder-utils.js.map +1 -0
  140. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.d.ts +7 -0
  141. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.js +203 -0
  142. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.css.js.map +1 -0
  143. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.d.ts +94 -0
  144. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.js +578 -0
  145. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.js.map +1 -0
  146. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.d.ts +1 -0
  147. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.js +890 -0
  148. package/dist/src/nile-timestamp-builder/nile-timestamp-builder.test.js.map +1 -0
  149. package/dist/src/nile-timestamp-builder/timezones.d.ts +8 -0
  150. package/dist/src/nile-timestamp-builder/timezones.js +357 -0
  151. package/dist/src/nile-timestamp-builder/timezones.js.map +1 -0
  152. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js +91 -58
  153. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.js.map +1 -1
  154. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.d.ts +2 -1
  155. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js +23 -1
  156. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-editor.js.map +1 -1
  157. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js +19 -19
  158. package/dist/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.js.map +1 -1
  159. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js +10 -10
  160. package/dist/src/nile-wysiwyg-editor/ui/bookmark-panel.js.map +1 -1
  161. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js +7 -7
  162. package/dist/src/nile-wysiwyg-editor/ui/bubble-menu.js.map +1 -1
  163. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js +5 -5
  164. package/dist/src/nile-wysiwyg-editor/ui/code-block-menu.js.map +1 -1
  165. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js +6 -6
  166. package/dist/src/nile-wysiwyg-editor/ui/embed-menu.js.map +1 -1
  167. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js +4 -4
  168. package/dist/src/nile-wysiwyg-editor/ui/embed-panel.js.map +1 -1
  169. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js +6 -6
  170. package/dist/src/nile-wysiwyg-editor/ui/emoji-picker.js.map +1 -1
  171. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js +7 -7
  172. package/dist/src/nile-wysiwyg-editor/ui/find-replace.js.map +1 -1
  173. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js +6 -6
  174. package/dist/src/nile-wysiwyg-editor/ui/image-menu.js.map +1 -1
  175. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js +6 -6
  176. package/dist/src/nile-wysiwyg-editor/ui/image-panel.js.map +1 -1
  177. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js +7 -7
  178. package/dist/src/nile-wysiwyg-editor/ui/insert-menu.js.map +1 -1
  179. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js +9 -9
  180. package/dist/src/nile-wysiwyg-editor/ui/link-editor.js.map +1 -1
  181. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js +8 -8
  182. package/dist/src/nile-wysiwyg-editor/ui/markdown-panel.js.map +1 -1
  183. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js +4 -4
  184. package/dist/src/nile-wysiwyg-editor/ui/math-panel.js.map +1 -1
  185. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js +9 -9
  186. package/dist/src/nile-wysiwyg-editor/ui/shortcut-help.js.map +1 -1
  187. package/dist/src/nile-wysiwyg-editor/ui/source-view.js +24 -24
  188. package/dist/src/nile-wysiwyg-editor/ui/source-view.js.map +1 -1
  189. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js +4 -4
  190. package/dist/src/nile-wysiwyg-editor/ui/special-chars.js.map +1 -1
  191. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js +7 -7
  192. package/dist/src/nile-wysiwyg-editor/ui/suggest-list.js.map +1 -1
  193. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js +16 -16
  194. package/dist/src/nile-wysiwyg-editor/ui/table-grid-picker.js.map +1 -1
  195. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js +4 -4
  196. package/dist/src/nile-wysiwyg-editor/ui/table-menu.js.map +1 -1
  197. package/dist/src/version.js +2 -2
  198. package/dist/src/version.js.map +1 -1
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +1 -1
  201. package/src/index.ts +1 -0
  202. package/src/nile-code-editor/nile-code-editor.css.ts +2 -2
  203. package/src/nile-code-editor/nile-code-editor.ts +68 -5
  204. package/src/nile-code-editor/theme.ts +129 -162
  205. package/src/nile-combobox/nile-combobox.css.ts +1 -1
  206. package/src/nile-detail/nile-detail.css.ts +1 -1
  207. package/src/nile-side-bar-footer/nile-side-bar-footer.css.ts +3 -3
  208. package/src/nile-side-bar-footer-item/nile-side-bar-footer-item.css.ts +11 -5
  209. package/src/nile-timestamp-builder/index.ts +1 -0
  210. package/src/nile-timestamp-builder/nile-timestamp-builder-utils.ts +321 -0
  211. package/src/nile-timestamp-builder/nile-timestamp-builder.css.ts +204 -0
  212. package/src/nile-timestamp-builder/nile-timestamp-builder.test.ts +1089 -0
  213. package/src/nile-timestamp-builder/nile-timestamp-builder.ts +625 -0
  214. package/src/nile-timestamp-builder/timezones.ts +356 -0
  215. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.css.ts +91 -58
  216. package/src/nile-wysiwyg-editor/nile-wysiwyg-editor.ts +21 -1
  217. package/src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts +19 -19
  218. package/src/nile-wysiwyg-editor/ui/bookmark-panel.ts +10 -10
  219. package/src/nile-wysiwyg-editor/ui/bubble-menu.ts +7 -7
  220. package/src/nile-wysiwyg-editor/ui/code-block-menu.ts +5 -5
  221. package/src/nile-wysiwyg-editor/ui/embed-menu.ts +6 -6
  222. package/src/nile-wysiwyg-editor/ui/embed-panel.ts +4 -4
  223. package/src/nile-wysiwyg-editor/ui/emoji-picker.ts +6 -6
  224. package/src/nile-wysiwyg-editor/ui/find-replace.ts +7 -7
  225. package/src/nile-wysiwyg-editor/ui/image-menu.ts +6 -6
  226. package/src/nile-wysiwyg-editor/ui/image-panel.ts +6 -6
  227. package/src/nile-wysiwyg-editor/ui/insert-menu.ts +7 -7
  228. package/src/nile-wysiwyg-editor/ui/link-editor.ts +9 -9
  229. package/src/nile-wysiwyg-editor/ui/markdown-panel.ts +8 -8
  230. package/src/nile-wysiwyg-editor/ui/math-panel.ts +4 -4
  231. package/src/nile-wysiwyg-editor/ui/shortcut-help.ts +9 -9
  232. package/src/nile-wysiwyg-editor/ui/source-view.ts +24 -24
  233. package/src/nile-wysiwyg-editor/ui/special-chars.ts +4 -4
  234. package/src/nile-wysiwyg-editor/ui/suggest-list.ts +7 -7
  235. package/src/nile-wysiwyg-editor/ui/table-grid-picker.ts +16 -16
  236. package/src/nile-wysiwyg-editor/ui/table-menu.ts +4 -4
  237. package/vscode-html-custom-data.json +94 -2
  238. package/dist/index-e43755f5.cjs.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"shortcut-help.cjs.js","sources":["../../../../src/nile-wysiwyg-editor/ui/shortcut-help.ts"],"sourcesContent":["import { html, css, TemplateResult, CSSResultArray, PropertyValues, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\n\nconst isMac =\n typeof navigator !== 'undefined' && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\n\n/** Renders a binding like 'Mod-B' with platform-appropriate key labels. */\nfunction keyLabel(binding: string): string {\n return binding\n .split('-')\n .map(part => {\n switch (part) {\n case 'Mod':\n return isMac ? '⌘' : 'Ctrl';\n case 'Shift':\n return isMac ? '⇧' : 'Shift';\n case 'Alt':\n return isMac ? '⌥' : 'Alt';\n case 'Ctrl':\n return isMac ? '⌃' : 'Ctrl';\n default:\n return part;\n }\n })\n .join(isMac ? '' : '+');\n}\n\ninterface ShortcutGroup {\n title: string;\n items: { keys: string[]; label: string }[];\n}\n\nconst GROUPS: ShortcutGroup[] = [\n {\n title: 'Formatting',\n items: [\n { keys: ['Mod-B'], label: 'Bold' },\n { keys: ['Mod-I'], label: 'Italic' },\n { keys: ['Mod-U'], label: 'Underline' },\n { keys: ['Mod-Shift-X'], label: 'Strikethrough' },\n { keys: ['Mod-,'], label: 'Subscript' },\n { keys: ['Mod-.'], label: 'Superscript' },\n ],\n },\n {\n title: 'Blocks',\n items: [\n { keys: ['Ctrl-Shift-0'], label: 'Paragraph' },\n { keys: ['Ctrl-Shift-1…6'], label: 'Heading 1–6' },\n { keys: ['Mod-Shift-8'], label: 'Bulleted list' },\n { keys: ['Mod-Shift-7'], label: 'Numbered list' },\n { keys: ['Mod-Shift-9'], label: 'Blockquote' },\n { keys: ['Mod-Alt-C'], label: 'Code block' },\n { keys: ['Tab', 'Shift-Tab'], label: 'Indent / outdent list item' },\n { keys: ['Mod-]', 'Mod-['], label: 'Indent / outdent block' },\n { keys: ['Shift-Enter'], label: 'Line break' },\n ],\n },\n {\n title: 'Editing & tools',\n items: [\n { keys: ['Mod-Z'], label: 'Undo' },\n { keys: ['Mod-Shift-Z'], label: 'Redo' },\n { keys: ['Mod-K'], label: 'Insert or edit link' },\n { keys: ['Mod-F'], label: 'Find & replace' },\n { keys: ['Mod-Shift-V'], label: 'Paste without formatting' },\n { keys: ['Mod-/'], label: 'This dialog' },\n ],\n },\n {\n title: 'Typing shortcuts',\n items: [\n { keys: ['# + space'], label: 'Heading (## for level 2 …)' },\n { keys: ['- + space'], label: 'Bulleted list' },\n { keys: ['1. + space'], label: 'Numbered list' },\n { keys: ['[] + space'], label: 'Checklist' },\n { keys: ['> + space'], label: 'Blockquote' },\n { keys: ['```'], label: 'Code block' },\n { keys: ['**text**'], label: 'Bold as you type' },\n { keys: ['URL + space'], label: 'Automatic link' },\n { keys: ['/'], label: 'Command menu' },\n { keys: [': + name'], label: 'Emoji picker' },\n ],\n },\n];\n\n/**\n * Keyboard shortcut reference dialog, opened from the toolbar or Mod-/.\n * Emits `wysiwyg-shortcut-help-close` when dismissed (Esc, ✕ or backdrop).\n */\n@customElement('nile-wysiwyg-shortcut-help')\nexport class NileWysiwygShortcutHelp extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @query('.help__panel') private panelEl?: HTMLElement;\n\n /** Body overflow value before we locked it; null = not locked by us. */\n private previousBodyOverflow: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [\n css`\n /* Fixed so the dialog overlays the viewport instead of being\n clipped by a small editor. */\n :host {\n font-family: var(\n --nile-font-family-sans-serif,\n var(--ng-font-family-body, system-ui, -apple-system, sans-serif)\n );\n position: fixed;\n inset: 0;\n z-index: var(--nile-wysiwyg-dialog-z-index, 1100);\n display: none;\n }\n\n :host([open]) {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .help__backdrop {\n position: absolute;\n inset: 0;\n background: rgba(16, 24, 40, 0.4);\n }\n\n .help__panel {\n position: relative;\n max-width: 560px;\n max-height: min(80%, 480px);\n margin: 16px;\n padding: 16px 20px;\n overflow-y: auto;\n overscroll-behavior: contain;\n outline: none;\n background: var(--nile-wysiwyg-popover-bg, #ffffff);\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 10px;\n box-shadow: var(\n --nile-wysiwyg-popover-shadow,\n 0 8px 24px rgba(16, 24, 40, 0.18)\n );\n font-size: 13px;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n .help__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n }\n\n .help__title {\n font-size: 14px;\n font-weight: 600;\n color: var(--nile-colors-dark-900, #101828);\n }\n\n .help__close {\n font: inherit;\n border: none;\n background: transparent;\n border-radius: 5px;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n .help__close:hover {\n background: var(--nile-colors-neutral-100, #f2f4f7);\n }\n\n .help__columns {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 4px 24px;\n }\n\n .help__group-title {\n margin: 10px 0 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--nile-colors-neutral-500, #98a2b3);\n }\n\n .help__row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 3px 0;\n }\n\n .help__keys {\n white-space: nowrap;\n }\n\n kbd {\n display: inline-block;\n padding: 1px 6px;\n font-family: inherit;\n font-size: 12px;\n line-height: 1.5;\n background: var(--nile-colors-neutral-100, #f2f4f7);\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-bottom-width: 2px;\n border-radius: 5px;\n }\n `,\n ];\n }\n\n /**\n * Locks page scrolling while the dialog is open (the fixed backdrop blocks\n * clicks but not wheel/touch scrolling of the document behind it).\n * Save/restore keeps it composable with other locks (e.g. fullscreen).\n */\n protected updated(changed: PropertyValues): void {\n if (!changed.has('open')) return;\n if (this.open) {\n if (this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n } else if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n\n /** Moves focus into the dialog so Esc lands here. */\n public focusPanel(): void {\n this.updateComplete.then(() => this.panelEl?.focus());\n }\n\n private close(): void {\n this.emit('wysiwyg-shortcut-help-close');\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.stopPropagation();\n this.close();\n }\n }\n\n public render(): TemplateResult | typeof nothing {\n if (!this.open) return nothing;\n return html`\n <div class=\"help__backdrop\" @click=${this.close}></div>\n <div\n class=\"help__panel\"\n part=\"shortcut-help\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Keyboard shortcuts\"\n tabindex=\"-1\"\n @keydown=${this.handleKeydown}\n >\n <div class=\"help__header\">\n <span class=\"help__title\">Keyboard shortcuts</span>\n <button type=\"button\" class=\"help__close\" title=\"Close (Esc)\" @click=${this.close}>\n ✕\n </button>\n </div>\n <div class=\"help__columns\">\n ${GROUPS.map(\n group => html`\n <div>\n <div class=\"help__group-title\">${group.title}</div>\n ${group.items.map(\n item => html`\n <div class=\"help__row\">\n <span>${item.label}</span>\n <span class=\"help__keys\">\n ${item.keys.map(\n (key, index) => html`${index > 0 ? ' / ' : nothing}<kbd\n >${keyLabel(key)}</kbd\n >`\n )}\n </span>\n </div>\n `\n )}\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-shortcut-help': NileWysiwygShortcutHelp;\n }\n}\n"],"names":["isMac","navigator","test","platform","GROUPS","title","items","keys","label","NileWysiwygShortcutHelp","_n","p","this","open","previousBodyOverflow","_this","_inherits","_createClass","key","value","updated","changed","has","document","body","style","overflow","disconnectedCallback","super","focusPanel","updateComplete","then","_this2$panelEl","panelEl","focus","close","emit","handleKeydown","event","stopPropagation","render","html","_templateObject","_taggedTemplateLiteral","map","group","_templateObject2","item","_templateObject3","index","i","_templateObject4","nothing","binding","split","part","join","get","styles","css","_templateObject5","NileElement","__decorate","property","type","Boolean","reflect","prototype","query","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"shortcut-help.cjs.js","sources":["../../../../src/nile-wysiwyg-editor/ui/shortcut-help.ts"],"sourcesContent":["import { html, css, TemplateResult, CSSResultArray, PropertyValues, nothing } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\n\nconst isMac =\n typeof navigator !== 'undefined' && /Mac|iP(hone|[oa]d)/.test(navigator.platform);\n\n/** Renders a binding like 'Mod-B' with platform-appropriate key labels. */\nfunction keyLabel(binding: string): string {\n return binding\n .split('-')\n .map(part => {\n switch (part) {\n case 'Mod':\n return isMac ? '⌘' : 'Ctrl';\n case 'Shift':\n return isMac ? '⇧' : 'Shift';\n case 'Alt':\n return isMac ? '⌥' : 'Alt';\n case 'Ctrl':\n return isMac ? '⌃' : 'Ctrl';\n default:\n return part;\n }\n })\n .join(isMac ? '' : '+');\n}\n\ninterface ShortcutGroup {\n title: string;\n items: { keys: string[]; label: string }[];\n}\n\nconst GROUPS: ShortcutGroup[] = [\n {\n title: 'Formatting',\n items: [\n { keys: ['Mod-B'], label: 'Bold' },\n { keys: ['Mod-I'], label: 'Italic' },\n { keys: ['Mod-U'], label: 'Underline' },\n { keys: ['Mod-Shift-X'], label: 'Strikethrough' },\n { keys: ['Mod-,'], label: 'Subscript' },\n { keys: ['Mod-.'], label: 'Superscript' },\n ],\n },\n {\n title: 'Blocks',\n items: [\n { keys: ['Ctrl-Shift-0'], label: 'Paragraph' },\n { keys: ['Ctrl-Shift-1…6'], label: 'Heading 1–6' },\n { keys: ['Mod-Shift-8'], label: 'Bulleted list' },\n { keys: ['Mod-Shift-7'], label: 'Numbered list' },\n { keys: ['Mod-Shift-9'], label: 'Blockquote' },\n { keys: ['Mod-Alt-C'], label: 'Code block' },\n { keys: ['Tab', 'Shift-Tab'], label: 'Indent / outdent list item' },\n { keys: ['Mod-]', 'Mod-['], label: 'Indent / outdent block' },\n { keys: ['Shift-Enter'], label: 'Line break' },\n ],\n },\n {\n title: 'Editing & tools',\n items: [\n { keys: ['Mod-Z'], label: 'Undo' },\n { keys: ['Mod-Shift-Z'], label: 'Redo' },\n { keys: ['Mod-K'], label: 'Insert or edit link' },\n { keys: ['Mod-F'], label: 'Find & replace' },\n { keys: ['Mod-Shift-V'], label: 'Paste without formatting' },\n { keys: ['Mod-/'], label: 'This dialog' },\n ],\n },\n {\n title: 'Typing shortcuts',\n items: [\n { keys: ['# + space'], label: 'Heading (## for level 2 …)' },\n { keys: ['- + space'], label: 'Bulleted list' },\n { keys: ['1. + space'], label: 'Numbered list' },\n { keys: ['[] + space'], label: 'Checklist' },\n { keys: ['> + space'], label: 'Blockquote' },\n { keys: ['```'], label: 'Code block' },\n { keys: ['**text**'], label: 'Bold as you type' },\n { keys: ['URL + space'], label: 'Automatic link' },\n { keys: ['/'], label: 'Command menu' },\n { keys: [': + name'], label: 'Emoji picker' },\n ],\n },\n];\n\n/**\n * Keyboard shortcut reference dialog, opened from the toolbar or Mod-/.\n * Emits `wysiwyg-shortcut-help-close` when dismissed (Esc, ✕ or backdrop).\n */\n@customElement('nile-wysiwyg-shortcut-help')\nexport class NileWysiwygShortcutHelp extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @query('.help__panel') private panelEl?: HTMLElement;\n\n /** Body overflow value before we locked it; null = not locked by us. */\n private previousBodyOverflow: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [\n css`\n /* Fixed so the dialog overlays the viewport instead of being\n clipped by a small editor. */\n :host {\n font-family: var(\n --nile-font-family-sans-serif,\n var(--ng-font-family-body, system-ui, -apple-system, sans-serif)\n );\n position: fixed;\n inset: 0;\n z-index: var(--nile-wysiwyg-dialog-z-index, 1100);\n display: none;\n }\n\n :host([open]) {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .help__backdrop {\n position: absolute;\n inset: 0;\n background: rgba(16, 24, 40, 0.4);\n }\n\n .help__panel {\n position: relative;\n max-width: 560px;\n max-height: min(80%, 480px);\n margin: 16px;\n padding: 16px 20px;\n overflow-y: auto;\n overscroll-behavior: contain;\n outline: none;\n background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));\n border-radius: 10px;\n box-shadow: var(\n --nile-wysiwyg-popover-shadow,\n 0 8px 24px rgba(16, 24, 40, 0.18)\n );\n font-size: 13px;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n .help__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n }\n\n .help__title {\n font-size: 14px;\n font-weight: 600;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n .help__close {\n font: inherit;\n border: none;\n background: transparent;\n border-radius: 5px;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n .help__close:hover {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .help__columns {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 4px 24px;\n }\n\n .help__group-title {\n margin: 10px 0 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));\n }\n\n .help__row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 3px 0;\n }\n\n .help__keys {\n white-space: nowrap;\n }\n\n kbd {\n display: inline-block;\n padding: 1px 6px;\n font-family: inherit;\n font-size: 12px;\n line-height: 1.5;\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));\n border-bottom-width: 2px;\n border-radius: 5px;\n }\n `,\n ];\n }\n\n /**\n * Locks page scrolling while the dialog is open (the fixed backdrop blocks\n * clicks but not wheel/touch scrolling of the document behind it).\n * Save/restore keeps it composable with other locks (e.g. fullscreen).\n */\n protected updated(changed: PropertyValues): void {\n if (!changed.has('open')) return;\n if (this.open) {\n if (this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n } else if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n\n /** Moves focus into the dialog so Esc lands here. */\n public focusPanel(): void {\n this.updateComplete.then(() => this.panelEl?.focus());\n }\n\n private close(): void {\n this.emit('wysiwyg-shortcut-help-close');\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.stopPropagation();\n this.close();\n }\n }\n\n public render(): TemplateResult | typeof nothing {\n if (!this.open) return nothing;\n return html`\n <div class=\"help__backdrop\" @click=${this.close}></div>\n <div\n class=\"help__panel\"\n part=\"shortcut-help\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Keyboard shortcuts\"\n tabindex=\"-1\"\n @keydown=${this.handleKeydown}\n >\n <div class=\"help__header\">\n <span class=\"help__title\">Keyboard shortcuts</span>\n <button type=\"button\" class=\"help__close\" title=\"Close (Esc)\" @click=${this.close}>\n ✕\n </button>\n </div>\n <div class=\"help__columns\">\n ${GROUPS.map(\n group => html`\n <div>\n <div class=\"help__group-title\">${group.title}</div>\n ${group.items.map(\n item => html`\n <div class=\"help__row\">\n <span>${item.label}</span>\n <span class=\"help__keys\">\n ${item.keys.map(\n (key, index) => html`${index > 0 ? ' / ' : nothing}<kbd\n >${keyLabel(key)}</kbd\n >`\n )}\n </span>\n </div>\n `\n )}\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-shortcut-help': NileWysiwygShortcutHelp;\n }\n}\n"],"names":["isMac","navigator","test","platform","GROUPS","title","items","keys","label","NileWysiwygShortcutHelp","_r","p","this","open","previousBodyOverflow","_this","_inherits","_createClass","key","value","updated","changed","has","document","body","style","overflow","disconnectedCallback","super","focusPanel","updateComplete","then","_this2$panelEl","panelEl","focus","close","emit","handleKeydown","event","stopPropagation","render","html","_templateObject","_taggedTemplateLiteral","map","group","_templateObject2","item","_templateObject3","index","o","_templateObject4","nothing","binding","split","part","join","get","styles","css","_templateObject5","NileElement","__decorate","property","type","Boolean","reflect","prototype","query","customElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"lit";import{property as s,query as o,customElement as a}from"lit/decorators.js";import{N as n}from"../../internal/nile-element.esm.js";import"../../internal/accessibility/a11y.state.enum.esm.js";import"../../internal/accessibility/a11y.property.enum.esm.js";import"../../internal/accessibility/role.enum.esm.js";const r="undefined"!=typeof navigator&&/Mac|iP(hone|[oa]d)/.test(navigator.platform);const d=[{title:"Formatting",items:[{keys:["Mod-B"],label:"Bold"},{keys:["Mod-I"],label:"Italic"},{keys:["Mod-U"],label:"Underline"},{keys:["Mod-Shift-X"],label:"Strikethrough"},{keys:["Mod-,"],label:"Subscript"},{keys:["Mod-."],label:"Superscript"}]},{title:"Blocks",items:[{keys:["Ctrl-Shift-0"],label:"Paragraph"},{keys:["Ctrl-Shift-1…6"],label:"Heading 1–6"},{keys:["Mod-Shift-8"],label:"Bulleted list"},{keys:["Mod-Shift-7"],label:"Numbered list"},{keys:["Mod-Shift-9"],label:"Blockquote"},{keys:["Mod-Alt-C"],label:"Code block"},{keys:["Tab","Shift-Tab"],label:"Indent / outdent list item"},{keys:["Mod-]","Mod-["],label:"Indent / outdent block"},{keys:["Shift-Enter"],label:"Line break"}]},{title:"Editing & tools",items:[{keys:["Mod-Z"],label:"Undo"},{keys:["Mod-Shift-Z"],label:"Redo"},{keys:["Mod-K"],label:"Insert or edit link"},{keys:["Mod-F"],label:"Find & replace"},{keys:["Mod-Shift-V"],label:"Paste without formatting"},{keys:["Mod-/"],label:"This dialog"}]},{title:"Typing shortcuts",items:[{keys:["# + space"],label:"Heading (## for level 2 …)"},{keys:["- + space"],label:"Bulleted list"},{keys:["1. + space"],label:"Numbered list"},{keys:["[] + space"],label:"Checklist"},{keys:["> + space"],label:"Blockquote"},{keys:["```"],label:"Code block"},{keys:["**text**"],label:"Bold as you type"},{keys:["URL + space"],label:"Automatic link"},{keys:["/"],label:"Command menu"},{keys:[": + name"],label:"Emoji picker"}]}];let p=class extends n{constructor(){super(...arguments),this.open=!1,this.previousBodyOverflow=null}static get styles(){return[l`
1
+ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as o}from"lit";import{property as s,query as i,customElement as a}from"lit/decorators.js";import{N as r}from"../../internal/nile-element.esm.js";import"../../internal/accessibility/a11y.state.enum.esm.js";import"../../internal/accessibility/a11y.property.enum.esm.js";import"../../internal/accessibility/role.enum.esm.js";const n="undefined"!=typeof navigator&&/Mac|iP(hone|[oa]d)/.test(navigator.platform);const d=[{title:"Formatting",items:[{keys:["Mod-B"],label:"Bold"},{keys:["Mod-I"],label:"Italic"},{keys:["Mod-U"],label:"Underline"},{keys:["Mod-Shift-X"],label:"Strikethrough"},{keys:["Mod-,"],label:"Subscript"},{keys:["Mod-."],label:"Superscript"}]},{title:"Blocks",items:[{keys:["Ctrl-Shift-0"],label:"Paragraph"},{keys:["Ctrl-Shift-1…6"],label:"Heading 1–6"},{keys:["Mod-Shift-8"],label:"Bulleted list"},{keys:["Mod-Shift-7"],label:"Numbered list"},{keys:["Mod-Shift-9"],label:"Blockquote"},{keys:["Mod-Alt-C"],label:"Code block"},{keys:["Tab","Shift-Tab"],label:"Indent / outdent list item"},{keys:["Mod-]","Mod-["],label:"Indent / outdent block"},{keys:["Shift-Enter"],label:"Line break"}]},{title:"Editing & tools",items:[{keys:["Mod-Z"],label:"Undo"},{keys:["Mod-Shift-Z"],label:"Redo"},{keys:["Mod-K"],label:"Insert or edit link"},{keys:["Mod-F"],label:"Find & replace"},{keys:["Mod-Shift-V"],label:"Paste without formatting"},{keys:["Mod-/"],label:"This dialog"}]},{title:"Typing shortcuts",items:[{keys:["# + space"],label:"Heading (## for level 2 …)"},{keys:["- + space"],label:"Bulleted list"},{keys:["1. + space"],label:"Numbered list"},{keys:["[] + space"],label:"Checklist"},{keys:["> + space"],label:"Blockquote"},{keys:["```"],label:"Code block"},{keys:["**text**"],label:"Bold as you type"},{keys:["URL + space"],label:"Automatic link"},{keys:["/"],label:"Command menu"},{keys:[": + name"],label:"Emoji picker"}]}];let p=class extends r{constructor(){super(...arguments),this.open=!1,this.previousBodyOverflow=null}static get styles(){return[l`
2
2
  /* Fixed so the dialog overlays the viewport instead of being
3
3
  clipped by a small editor. */
4
4
  :host {
@@ -33,15 +33,15 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
33
33
  overflow-y: auto;
34
34
  overscroll-behavior: contain;
35
35
  outline: none;
36
- background: var(--nile-wysiwyg-popover-bg, #ffffff);
37
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
36
+ background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));
37
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
38
38
  border-radius: 10px;
39
39
  box-shadow: var(
40
40
  --nile-wysiwyg-popover-shadow,
41
41
  0 8px 24px rgba(16, 24, 40, 0.18)
42
42
  );
43
43
  font-size: 13px;
44
- color: var(--nile-colors-neutral-700, #344054);
44
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
45
45
  }
46
46
 
47
47
  .help__header {
@@ -54,7 +54,7 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
54
54
  .help__title {
55
55
  font-size: 14px;
56
56
  font-weight: 600;
57
- color: var(--nile-colors-dark-900, #101828);
57
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
58
58
  }
59
59
 
60
60
  .help__close {
@@ -64,11 +64,11 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
64
64
  border-radius: 5px;
65
65
  padding: 4px 8px;
66
66
  cursor: pointer;
67
- color: var(--nile-colors-neutral-700, #344054);
67
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
68
68
  }
69
69
 
70
70
  .help__close:hover {
71
- background: var(--nile-colors-neutral-100, #f2f4f7);
71
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
72
72
  }
73
73
 
74
74
  .help__columns {
@@ -83,7 +83,7 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
83
83
  font-weight: 600;
84
84
  text-transform: uppercase;
85
85
  letter-spacing: 0.04em;
86
- color: var(--nile-colors-neutral-500, #98a2b3);
86
+ color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));
87
87
  }
88
88
 
89
89
  .help__row {
@@ -104,12 +104,12 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
104
104
  font-family: inherit;
105
105
  font-size: 12px;
106
106
  line-height: 1.5;
107
- background: var(--nile-colors-neutral-100, #f2f4f7);
108
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
107
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
108
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
109
109
  border-bottom-width: 2px;
110
110
  border-radius: 5px;
111
111
  }
112
- `]}updated(e){e.has("open")&&(this.open?null===this.previousBodyOverflow&&(this.previousBodyOverflow=document.body.style.overflow,document.body.style.overflow="hidden"):null!==this.previousBodyOverflow&&(document.body.style.overflow=this.previousBodyOverflow,this.previousBodyOverflow=null))}disconnectedCallback(){super.disconnectedCallback(),null!==this.previousBodyOverflow&&(document.body.style.overflow=this.previousBodyOverflow,this.previousBodyOverflow=null)}focusPanel(){this.updateComplete.then((()=>this.panelEl?.focus()))}close(){this.emit("wysiwyg-shortcut-help-close")}handleKeydown(e){"Escape"===e.key&&(e.stopPropagation(),this.close())}render(){return this.open?i`
112
+ `]}updated(e){e.has("open")&&(this.open?null===this.previousBodyOverflow&&(this.previousBodyOverflow=document.body.style.overflow,document.body.style.overflow="hidden"):null!==this.previousBodyOverflow&&(document.body.style.overflow=this.previousBodyOverflow,this.previousBodyOverflow=null))}disconnectedCallback(){super.disconnectedCallback(),null!==this.previousBodyOverflow&&(document.body.style.overflow=this.previousBodyOverflow,this.previousBodyOverflow=null)}focusPanel(){this.updateComplete.then((()=>this.panelEl?.focus()))}close(){this.emit("wysiwyg-shortcut-help-close")}handleKeydown(e){"Escape"===e.key&&(e.stopPropagation(),this.close())}render(){return this.open?o`
113
113
  <div class="help__backdrop" @click=${this.close}></div>
114
114
  <div
115
115
  class="help__panel"
@@ -127,15 +127,15 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
127
127
  </button>
128
128
  </div>
129
129
  <div class="help__columns">
130
- ${d.map((e=>i`
130
+ ${d.map((e=>o`
131
131
  <div>
132
132
  <div class="help__group-title">${e.title}</div>
133
- ${e.items.map((e=>i`
133
+ ${e.items.map((e=>o`
134
134
  <div class="help__row">
135
135
  <span>${e.label}</span>
136
136
  <span class="help__keys">
137
- ${e.keys.map(((e,l)=>{return i`${l>0?" / ":t}<kbd
138
- >${s=e,s.split("-").map((e=>{switch(e){case"Mod":return r?"⌘":"Ctrl";case"Shift":return r?"⇧":"Shift";case"Alt":return r?"⌥":"Alt";case"Ctrl":return r?"⌃":"Ctrl";default:return e}})).join(r?"":"+")}</kbd
137
+ ${e.keys.map(((e,l)=>{return o`${l>0?" / ":t}<kbd
138
+ >${s=e,s.split("-").map((e=>{switch(e){case"Mod":return n?"⌘":"Ctrl";case"Shift":return n?"⇧":"Shift";case"Alt":return n?"⌥":"Alt";case"Ctrl":return n?"⌃":"Ctrl";default:return e}})).join(n?"":"+")}</kbd
139
139
  >`;var s}))}
140
140
  </span>
141
141
  </div>
@@ -144,4 +144,4 @@ import{__decorate as e}from"tslib";import{css as l,nothing as t,html as i}from"l
144
144
  `))}
145
145
  </div>
146
146
  </div>
147
- `:t}};e([s({type:Boolean,reflect:!0})],p.prototype,"open",void 0),e([o(".help__panel")],p.prototype,"panelEl",void 0),p=e([a("nile-wysiwyg-shortcut-help")],p);
147
+ `:t}};e([s({type:Boolean,reflect:!0})],p.prototype,"open",void 0),e([i(".help__panel")],p.prototype,"panelEl",void 0),p=e([a("nile-wysiwyg-shortcut-help")],p);
@@ -1,2 +1,2 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js","lit/directives/class-map.js","lit/directives/unsafe-html.js","../../xml-90fd974e.cjs.js","../../internal/nile-element.cjs.js","../engine/sanitize.cjs.js","./preview.cjs.js","../../internal/accessibility/a11y.state.enum.cjs.js","../../internal/accessibility/a11y.property.enum.cjs.js","../../internal/accessibility/role.enum.cjs.js","../engine/plugins/embeds.cjs.js","../../index-89c520e9.cjs.js","../nile-wysiwyg-editor.css.cjs.js"],function(_export,_context){"use strict";var e,t,i,r,o,s,l,n,a,h,c,d,p,_templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,g;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}return{setters:[function(_tslib){e=_tslib.__decorate;},function(_lit){t=_lit.css;i=_lit.html;},function(_litDecoratorsJs){r=_litDecoratorsJs.property;o=_litDecoratorsJs.query;s=_litDecoratorsJs.state;l=_litDecoratorsJs.customElement;},function(_litDirectivesClassMapJs){n=_litDirectivesClassMapJs.classMap;},function(_litDirectivesUnsafeHtmlJs){a=_litDirectivesUnsafeHtmlJs.unsafeHTML;},function(_xml00cCjsJs){h=_xml00cCjsJs.H;c=_xml00cCjsJs.x;},function(_internalNileElementCjsJs){d=_internalNileElementCjsJs.N;},function(_engineSanitizeCjsJs){p=_engineSanitizeCjsJs.s;},function(_previewCjsJs){},function(_internalAccessibilityA11yStateEnumCjsJs){},function(_internalAccessibilityA11yPropertyEnumCjsJs){},function(_internalAccessibilityRoleEnumCjsJs){},function(_enginePluginsEmbedsCjsJs){},function(_index00bCjsJs){},function(_nileWysiwygEditorCssCjsJs){}],execute:function execute(){h.registerLanguage("xml",c);g=/*#__PURE__*/function(_d){function g(){var _this;_classCallCheck(this,g);_this=_callSuper(this,g,arguments),_this.value="",_this.draft="",_this.splitRatio=.5,_this.splitDragging=!1,_this.startSplitDrag=function(e){var t=_this.bodyEl;if(!t)return;e.preventDefault(),_this.splitDragging=!0;var i=t.getBoundingClientRect(),r=function r(e){if(0===i.width)return;var t=(e.clientX-i.left)/i.width;_this.splitRatio=Math.min(.85,Math.max(.15,t));},_o=function o(){_this.splitDragging=!1,window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",_o);};window.addEventListener("pointermove",r),window.addEventListener("pointerup",_o);},_this.resetSplit=function(){_this.splitRatio=.5;},_this.onInput=function(e){_this.draft=e.target.value;},_this.onScroll=function(e){var t=e.target;_this.highlightEl&&(_this.highlightEl.style.transform="translate(".concat(-t.scrollLeft,"px, ").concat(-t.scrollTop,"px)")),_this.linenosEl&&(_this.linenosEl.style.transform="translateY(".concat(-t.scrollTop,"px)"));};return _this;}_inherits(g,_d);return _createClass(g,[{key:"willUpdate",value:function willUpdate(e){e.has("value")&&(this.draft=this.value);}},{key:"currentValue",get:function get(){return this.draft;}},{key:"focusInput",value:function focusInput(){var _this2=this;this.updateComplete.then(function(){var _this2$textarea;return(_this2$textarea=_this2.textarea)===null||_this2$textarea===void 0?void 0:_this2$textarea.focus();});}},{key:"highlighted",get:function get(){if(!this.draft)return"";try{return h.highlight(this.draft,{language:"xml"}).value;}catch(_unused){return this.draft.replace(/[&<>]/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;"}[e];});}}},{key:"lineCount",get:function get(){return this.draft?this.draft.split("\n").length:1;}},{key:"render",value:function render(){var _this3=this;var e=p(this.draft),t=[];for(var _e=1;_e<=this.lineCount;_e+=1)t.push(i(_templateObject||(_templateObject=_taggedTemplateLiteral(["<div>","</div>"])),_e));return i(_templateObject2||(_templateObject2=_taggedTemplateLiteral(["\n <div class=\"bar\" part=\"source-bar\">\n <span>HTML</span>\n <span class=\"actions\">\n <button type=\"button\" @click=",">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"primary\"\n @click=","\n >\n Done\n </button>\n </span>\n </div>\n <div class=",">\n <div class=\"pane pane--code\" style=\"flex: 0 0 ","%\">\n <div class=\"linenos\" part=\"line-numbers\" aria-hidden=\"true\">\n <div class=\"linenos-inner\">","</div>\n </div>\n <div class=\"input-wrap\">\n <pre class=\"hl\" aria-hidden=\"true\"><code>","</code></pre>\n <textarea\n part=\"source-textarea\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n wrap=\"off\"\n .value=","\n @input=","\n @scroll=","\n @keydown=","\n ></textarea>\n </div>\n </div>\n <div\n class=\"gutter\"\n part=\"gutter\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize source and preview\"\n title=\"Drag to resize \xB7 double-click to reset\"\n @pointerdown=","\n @dblclick=","\n ></div>\n <div class=\"pane pane--preview\" part=\"preview\">\n ","\n </div>\n </div>\n "])),function(){return _this3.emit("wysiwyg-source-cancel");},function(){return _this3.emit("wysiwyg-source-apply",{html:_this3.draft});},n({body:!0,"body--dragging":this.splitDragging}),100*this.splitRatio,t,a(this.highlighted),this.value,this.onInput,this.onScroll,function(e){"Escape"===e.key&&(e.stopPropagation(),_this3.emit("wysiwyg-source-cancel"));},this.startSplitDrag,this.resetSplit,this.draft.trim()?i(_templateObject3||(_templateObject3=_taggedTemplateLiteral(["<nile-wysiwyg-preview .content=","></nile-wysiwyg-preview>"])),e):i(_templateObject4||(_templateObject4=_taggedTemplateLiteral(["<span class=\"preview-empty\">Nothing to preview</span>"]))));}}],[{key:"styles",get:function get(){return[t(_templateObject5||(_templateObject5=_taggedTemplateLiteral(["\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n min-height: var(--nile-wysiwyg-min-height, 200px);\n height: var(--nile-wysiwyg-source-height, 340px);\n max-height: var(\n --nile-wysiwyg-source-max-height,\n var(--nile-wysiwyg-max-height, 70vh)\n );\n resize: vertical;\n }\n\n .bar {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--nile-colors-neutral-600, #475467);\n border-bottom: 1px solid var(--nile-colors-neutral-300, #e4e7ec);\n background: var(--nile-wysiwyg-toolbar-bg, var(--nile-colors-neutral-50, #f9fafb));\n }\n\n .actions {\n display: flex;\n gap: 8px;\n }\n\n button {\n font: inherit;\n font-size: 12px;\n padding: 4px 12px;\n border-radius: 6px;\n border: 1px solid transparent;\n cursor: pointer;\n background: transparent;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n button.primary {\n background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n color: #ffffff;\n }\n\n .body {\n flex: 1 1 auto;\n display: flex;\n align-items: stretch;\n overflow: hidden;\n min-height: 0;\n box-sizing: border-box;\n }\n\n .body--dragging {\n cursor: col-resize;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .body--dragging .pane {\n pointer-events: none;\n }\n\n .pane {\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n\n /* --- Lightweight code editor: gutter + highlighted textarea --- */\n .pane--code {\n display: flex;\n background: var(--nile-colors-white-base, #ffffff);\n /* Shared code metrics, inherited by the gutter, highlight and textarea\n so every line lines up to the pixel. */\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12px;\n line-height: 18px;\n tab-size: 2;\n -moz-tab-size: 2;\n }\n\n .linenos {\n flex: 0 0 auto;\n overflow: hidden;\n box-sizing: border-box;\n padding: 12px 8px 0;\n text-align: right;\n color: var(--nile-colors-neutral-400, #98a2b3);\n background: var(--nile-colors-neutral-50, #f9fafb);\n border-right: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n user-select: none;\n }\n\n .linenos-inner {\n will-change: transform;\n }\n\n .linenos-inner > div {\n height: 18px;\n }\n\n .input-wrap {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n }\n\n /* Highlight layer and textarea share the exact same box (offset for\n padding via top/left, extending to the edges for horizontal scroll),\n so the coloured text sits directly under the caret. */\n .hl,\n textarea {\n position: absolute;\n top: 12px;\n left: 16px;\n right: 0;\n bottom: 0;\n margin: 0;\n border: 0;\n padding: 0;\n font: inherit;\n line-height: inherit;\n tab-size: inherit;\n white-space: pre;\n word-wrap: normal;\n overflow-wrap: normal;\n box-sizing: border-box;\n }\n\n .hl {\n overflow: hidden;\n pointer-events: none;\n color: var(--nile-colors-neutral-900, #101828);\n }\n\n .hl > code {\n display: block;\n will-change: transform;\n }\n\n textarea {\n width: auto;\n resize: none;\n outline: none;\n overflow: auto;\n background: transparent;\n color: transparent;\n caret-color: var(--nile-colors-neutral-900, #101828);\n }\n\n /* Must be translucent: the textarea's text is transparent and the\n coloured code sits BEHIND it, so an opaque selection would hide the\n text. A tint lets the highlighted code show through the selection. */\n textarea::selection {\n background: rgba(41, 112, 255, 0.3);\n }\n textarea::-moz-selection {\n background: rgba(41, 112, 255, 0.3);\n }\n\n /* highlight.js token palette (Atom One Light), matching code blocks. */\n .hl .hljs-comment,\n .hl .hljs-quote { color: #a0a1a7; font-style: italic; }\n .hl .hljs-keyword,\n .hl .hljs-selector-tag,\n .hl .hljs-doctag { color: #a626a4; }\n .hl .hljs-name,\n .hl .hljs-selector-id,\n .hl .hljs-selector-class,\n .hl .hljs-tag { color: #e45649; }\n .hl .hljs-literal,\n .hl .hljs-built_in { color: #0184bb; }\n .hl .hljs-string,\n .hl .hljs-attribute,\n .hl .hljs-meta .hljs-string { color: #50a14f; }\n .hl .hljs-attr,\n .hl .hljs-variable,\n .hl .hljs-type,\n .hl .hljs-number { color: #986801; }\n .hl .hljs-symbol,\n .hl .hljs-meta,\n .hl .hljs-title { color: #4078f2; }\n\n /* Draggable divider between the code and preview panes. */\n .gutter {\n flex: 0 0 auto;\n position: relative;\n width: 1px;\n align-self: stretch;\n background: var(--nile-colors-neutral-300, #e4e7ec);\n cursor: col-resize;\n touch-action: none;\n }\n\n .gutter::before {\n content: '';\n position: absolute;\n inset: 0 -4px;\n }\n\n .gutter:hover,\n .body--dragging .gutter {\n background: var(--ng-colors-bg-brand-primary, #2970ff);\n }\n\n .pane--preview {\n flex: 1 1 0;\n overflow: auto;\n border-left: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n background: var(--nile-colors-white-base, #ffffff);\n }\n\n nile-wysiwyg-preview {\n display: block;\n }\n\n .preview-empty {\n display: block;\n padding: 12px 16px;\n color: var(--nile-colors-neutral-500, #98a2b3);\n font-size: 12px;\n opacity: 0.7;\n }\n "])))];}}]);}(d);e([r({type:String})],g.prototype,"value",void 0),e([o("textarea")],g.prototype,"textarea",void 0),e([o(".hl > code")],g.prototype,"highlightEl",void 0),e([o(".linenos-inner")],g.prototype,"linenosEl",void 0),e([o(".body")],g.prototype,"bodyEl",void 0),e([s()],g.prototype,"draft",void 0),e([s()],g.prototype,"splitRatio",void 0),e([s()],g.prototype,"splitDragging",void 0),g=e([l("nile-wysiwyg-source-view")],g);}};});
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js","lit/directives/class-map.js","lit/directives/unsafe-html.js","../../xml-90fd974e.cjs.js","../../internal/nile-element.cjs.js","../engine/sanitize.cjs.js","./preview.cjs.js","../../internal/accessibility/a11y.state.enum.cjs.js","../../internal/accessibility/a11y.property.enum.cjs.js","../../internal/accessibility/role.enum.cjs.js","../engine/plugins/embeds.cjs.js","../../index-89c520e9.cjs.js","../nile-wysiwyg-editor.css.cjs.js"],function(_export,_context){"use strict";var e,t,r,o,i,n,s,l,a,c,h,d,p,_templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,g;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}return{setters:[function(_tslib){e=_tslib.__decorate;},function(_lit){t=_lit.css;r=_lit.html;},function(_litDecoratorsJs){o=_litDecoratorsJs.property;i=_litDecoratorsJs.query;n=_litDecoratorsJs.state;s=_litDecoratorsJs.customElement;},function(_litDirectivesClassMapJs){l=_litDirectivesClassMapJs.classMap;},function(_litDirectivesUnsafeHtmlJs){a=_litDirectivesUnsafeHtmlJs.unsafeHTML;},function(_xml00cCjsJs){c=_xml00cCjsJs.H;h=_xml00cCjsJs.x;},function(_internalNileElementCjsJs){d=_internalNileElementCjsJs.N;},function(_engineSanitizeCjsJs){p=_engineSanitizeCjsJs.s;},function(_previewCjsJs){},function(_internalAccessibilityA11yStateEnumCjsJs){},function(_internalAccessibilityA11yPropertyEnumCjsJs){},function(_internalAccessibilityRoleEnumCjsJs){},function(_enginePluginsEmbedsCjsJs){},function(_index00bCjsJs){},function(_nileWysiwygEditorCssCjsJs){}],execute:function execute(){c.registerLanguage("xml",h);g=/*#__PURE__*/function(_d){function g(){var _this;_classCallCheck(this,g);_this=_callSuper(this,g,arguments),_this.value="",_this.draft="",_this.splitRatio=.5,_this.splitDragging=!1,_this.startSplitDrag=function(e){var t=_this.bodyEl;if(!t)return;e.preventDefault(),_this.splitDragging=!0;var r=t.getBoundingClientRect(),o=function o(e){if(0===r.width)return;var t=(e.clientX-r.left)/r.width;_this.splitRatio=Math.min(.85,Math.max(.15,t));},_i=function i(){_this.splitDragging=!1,window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",_i);};window.addEventListener("pointermove",o),window.addEventListener("pointerup",_i);},_this.resetSplit=function(){_this.splitRatio=.5;},_this.onInput=function(e){_this.draft=e.target.value;},_this.onScroll=function(e){var t=e.target;_this.highlightEl&&(_this.highlightEl.style.transform="translate(".concat(-t.scrollLeft,"px, ").concat(-t.scrollTop,"px)")),_this.linenosEl&&(_this.linenosEl.style.transform="translateY(".concat(-t.scrollTop,"px)"));};return _this;}_inherits(g,_d);return _createClass(g,[{key:"willUpdate",value:function willUpdate(e){e.has("value")&&(this.draft=this.value);}},{key:"currentValue",get:function get(){return this.draft;}},{key:"focusInput",value:function focusInput(){var _this2=this;this.updateComplete.then(function(){var _this2$textarea;return(_this2$textarea=_this2.textarea)===null||_this2$textarea===void 0?void 0:_this2$textarea.focus();});}},{key:"highlighted",get:function get(){if(!this.draft)return"";try{return c.highlight(this.draft,{language:"xml"}).value;}catch(_unused){return this.draft.replace(/[&<>]/g,function(e){return{"&":"&amp;","<":"&lt;",">":"&gt;"}[e];});}}},{key:"lineCount",get:function get(){return this.draft?this.draft.split("\n").length:1;}},{key:"render",value:function render(){var _this3=this;var e=p(this.draft),t=[];for(var _e=1;_e<=this.lineCount;_e+=1)t.push(r(_templateObject||(_templateObject=_taggedTemplateLiteral(["<div>","</div>"])),_e));return r(_templateObject2||(_templateObject2=_taggedTemplateLiteral(["\n <div class=\"bar\" part=\"source-bar\">\n <span>HTML</span>\n <span class=\"actions\">\n <button type=\"button\" @click=",">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"primary\"\n @click=","\n >\n Done\n </button>\n </span>\n </div>\n <div class=",">\n <div class=\"pane pane--code\" style=\"flex: 0 0 ","%\">\n <div class=\"linenos\" part=\"line-numbers\" aria-hidden=\"true\">\n <div class=\"linenos-inner\">","</div>\n </div>\n <div class=\"input-wrap\">\n <pre class=\"hl\" aria-hidden=\"true\"><code>","</code></pre>\n <textarea\n part=\"source-textarea\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n wrap=\"off\"\n .value=","\n @input=","\n @scroll=","\n @keydown=","\n ></textarea>\n </div>\n </div>\n <div\n class=\"gutter\"\n part=\"gutter\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize source and preview\"\n title=\"Drag to resize \xB7 double-click to reset\"\n @pointerdown=","\n @dblclick=","\n ></div>\n <div class=\"pane pane--preview\" part=\"preview\">\n ","\n </div>\n </div>\n "])),function(){return _this3.emit("wysiwyg-source-cancel");},function(){return _this3.emit("wysiwyg-source-apply",{html:_this3.draft});},l({body:!0,"body--dragging":this.splitDragging}),100*this.splitRatio,t,a(this.highlighted),this.value,this.onInput,this.onScroll,function(e){"Escape"===e.key&&(e.stopPropagation(),_this3.emit("wysiwyg-source-cancel"));},this.startSplitDrag,this.resetSplit,this.draft.trim()?r(_templateObject3||(_templateObject3=_taggedTemplateLiteral(["<nile-wysiwyg-preview .content=","></nile-wysiwyg-preview>"])),e):r(_templateObject4||(_templateObject4=_taggedTemplateLiteral(["<span class=\"preview-empty\">Nothing to preview</span>"]))));}}],[{key:"styles",get:function get(){return[t(_templateObject5||(_templateObject5=_taggedTemplateLiteral(["\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n min-height: var(--nile-wysiwyg-min-height, 200px);\n height: var(--nile-wysiwyg-source-height, 340px);\n max-height: var(\n --nile-wysiwyg-source-max-height,\n var(--nile-wysiwyg-max-height, 70vh)\n );\n resize: vertical;\n }\n\n .bar {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--nile-colors-neutral-600, var(--ng-colors-text-tertiary-600));\n border-bottom: 1px solid var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n background: var(--nile-wysiwyg-toolbar-bg, var(--nile-colors-neutral-50, var(--ng-colors-bg-secondary)));\n }\n\n .actions {\n display: flex;\n gap: 8px;\n }\n\n button {\n font: inherit;\n font-size: 12px;\n padding: 4px 12px;\n border-radius: 6px;\n border: 1px solid transparent;\n cursor: pointer;\n background: transparent;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n button.primary {\n background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));\n color: var(--ng-colors-text-white);\n }\n\n .body {\n flex: 1 1 auto;\n display: flex;\n align-items: stretch;\n overflow: hidden;\n min-height: 0;\n box-sizing: border-box;\n }\n\n .body--dragging {\n cursor: col-resize;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .body--dragging .pane {\n pointer-events: none;\n }\n\n .pane {\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n\n /* --- Lightweight code editor: gutter + highlighted textarea --- */\n .pane--code {\n display: flex;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n /* Shared code metrics, inherited by the gutter, highlight and textarea\n so every line lines up to the pixel. */\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12px;\n line-height: 18px;\n tab-size: 2;\n -moz-tab-size: 2;\n }\n\n .linenos {\n flex: 0 0 auto;\n overflow: hidden;\n box-sizing: border-box;\n padding: 12px 8px 0;\n text-align: right;\n color: var(--nile-colors-neutral-400, var(--ng-colors-text-quaternary-500));\n background: var(--nile-colors-neutral-50, var(--ng-colors-bg-secondary));\n border-right: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));\n user-select: none;\n }\n\n .linenos-inner {\n will-change: transform;\n }\n\n .linenos-inner > div {\n height: 18px;\n }\n\n .input-wrap {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n }\n\n /* Highlight layer and textarea share the exact same box (offset for\n padding via top/left, extending to the edges for horizontal scroll),\n so the coloured text sits directly under the caret. */\n .hl,\n textarea {\n position: absolute;\n top: 12px;\n left: 16px;\n right: 0;\n bottom: 0;\n margin: 0;\n border: 0;\n padding: 0;\n font: inherit;\n line-height: inherit;\n tab-size: inherit;\n white-space: pre;\n word-wrap: normal;\n overflow-wrap: normal;\n box-sizing: border-box;\n }\n\n .hl {\n overflow: hidden;\n pointer-events: none;\n color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary-900));\n }\n\n .hl > code {\n display: block;\n will-change: transform;\n }\n\n textarea {\n width: auto;\n resize: none;\n outline: none;\n overflow: auto;\n background: transparent;\n color: transparent;\n caret-color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary-900));\n }\n\n /* Must be translucent: the textarea's text is transparent and the\n coloured code sits BEHIND it, so an opaque selection would hide the\n text. A tint lets the highlighted code show through the selection. */\n textarea::selection {\n background: rgba(41, 112, 255, 0.3);\n }\n textarea::-moz-selection {\n background: rgba(41, 112, 255, 0.3);\n }\n\n /* highlight.js token palette (Atom One Light), matching code blocks. */\n .hl .hljs-comment,\n .hl .hljs-quote { color: var(--ng-componentcolors-utility-gray-500); font-style: italic; }\n .hl .hljs-keyword,\n .hl .hljs-selector-tag,\n .hl .hljs-doctag { color: var(--ng-componentcolors-utility-purple-600); }\n .hl .hljs-name,\n .hl .hljs-selector-id,\n .hl .hljs-selector-class,\n .hl .hljs-tag { color: var(--ng-componentcolors-utility-error-600); }\n .hl .hljs-literal,\n .hl .hljs-built_in { color: var(--ng-componentcolors-utility-blue-600); }\n .hl .hljs-string,\n .hl .hljs-attribute,\n .hl .hljs-meta .hljs-string { color: var(--ng-componentcolors-utility-green-600); }\n .hl .hljs-attr,\n .hl .hljs-variable,\n .hl .hljs-type,\n .hl .hljs-number { color: var(--ng-componentcolors-utility-orange-600); }\n .hl .hljs-symbol,\n .hl .hljs-meta,\n .hl .hljs-title { color: var(--ng-componentcolors-utility-indigo-600); }\n\n /* Draggable divider between the code and preview panes. */\n .gutter {\n flex: 0 0 auto;\n position: relative;\n width: 1px;\n align-self: stretch;\n background: var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n cursor: col-resize;\n touch-action: none;\n }\n\n .gutter::before {\n content: '';\n position: absolute;\n inset: 0 -4px;\n }\n\n .gutter:hover,\n .body--dragging .gutter {\n background: var(--ng-colors-bg-brand-primary);\n }\n\n .pane--preview {\n flex: 1 1 0;\n overflow: auto;\n border-left: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n }\n\n nile-wysiwyg-preview {\n display: block;\n }\n\n .preview-empty {\n display: block;\n padding: 12px 16px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));\n font-size: 12px;\n opacity: 0.7;\n }\n "])))];}}]);}(d);e([o({type:String})],g.prototype,"value",void 0),e([i("textarea")],g.prototype,"textarea",void 0),e([i(".hl > code")],g.prototype,"highlightEl",void 0),e([i(".linenos-inner")],g.prototype,"linenosEl",void 0),e([i(".body")],g.prototype,"bodyEl",void 0),e([n()],g.prototype,"draft",void 0),e([n()],g.prototype,"splitRatio",void 0),e([n()],g.prototype,"splitDragging",void 0),g=e([s("nile-wysiwyg-source-view")],g);}};});
2
2
  //# sourceMappingURL=source-view.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-view.cjs.js","sources":["../../../../src/nile-wysiwyg-editor/ui/source-view.ts"],"sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport hljs from 'highlight.js/lib/core';\nimport xml from 'highlight.js/lib/languages/xml';\nimport NileElement from '../../internal/nile-element';\nimport { sanitizeHtml } from '../engine/sanitize';\nimport './preview';\n\n// HTML highlighting only — reuses the same lib the code-block feature already\n// bundles, so this adds no new dependency. Registration is idempotent.\nhljs.registerLanguage('xml', xml);\n\n/**\n * Raw HTML source editing mode. A split view: the raw HTML on the left, a\n * live rendered preview on the right, with a draggable divider between them\n * and a resizable body. The preview runs the same sanitizer the host applies\n * on the way back, so what you see is what the document becomes. Emits\n * `wysiwyg-source-apply` detail: { html } and `wysiwyg-source-cancel`.\n *\n * The code pane is a lightweight editor: a real `<textarea>` for input, with a\n * highlight.js-coloured layer painted behind it and a synced line-number\n * gutter. No heavyweight code-editor dependency.\n */\n@customElement('nile-wysiwyg-source-view')\nexport class NileWysiwygSourceView extends NileElement {\n @property({ type: String }) value = '';\n\n @query('textarea') private textarea?: HTMLTextAreaElement;\n\n @query('.hl > code') private highlightEl?: HTMLElement;\n\n @query('.linenos-inner') private linenosEl?: HTMLElement;\n\n @query('.body') private bodyEl?: HTMLElement;\n\n /** Current source text, drives the live preview, highlight and gutter. */\n @state() private draft = '';\n\n /**\n * Fraction of the body width given to the code pane (the rest is preview).\n * Clamped while dragging the divider.\n */\n @state() private splitRatio = 0.5;\n\n /** Whether the divider is currently being dragged. */\n @state() private splitDragging = false;\n\n public static get styles(): CSSResultArray {\n return [\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n min-height: var(--nile-wysiwyg-min-height, 200px);\n height: var(--nile-wysiwyg-source-height, 340px);\n max-height: var(\n --nile-wysiwyg-source-max-height,\n var(--nile-wysiwyg-max-height, 70vh)\n );\n resize: vertical;\n }\n\n .bar {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--nile-colors-neutral-600, #475467);\n border-bottom: 1px solid var(--nile-colors-neutral-300, #e4e7ec);\n background: var(--nile-wysiwyg-toolbar-bg, var(--nile-colors-neutral-50, #f9fafb));\n }\n\n .actions {\n display: flex;\n gap: 8px;\n }\n\n button {\n font: inherit;\n font-size: 12px;\n padding: 4px 12px;\n border-radius: 6px;\n border: 1px solid transparent;\n cursor: pointer;\n background: transparent;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n button.primary {\n background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n color: #ffffff;\n }\n\n .body {\n flex: 1 1 auto;\n display: flex;\n align-items: stretch;\n overflow: hidden;\n min-height: 0;\n box-sizing: border-box;\n }\n\n .body--dragging {\n cursor: col-resize;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .body--dragging .pane {\n pointer-events: none;\n }\n\n .pane {\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n\n /* --- Lightweight code editor: gutter + highlighted textarea --- */\n .pane--code {\n display: flex;\n background: var(--nile-colors-white-base, #ffffff);\n /* Shared code metrics, inherited by the gutter, highlight and textarea\n so every line lines up to the pixel. */\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12px;\n line-height: 18px;\n tab-size: 2;\n -moz-tab-size: 2;\n }\n\n .linenos {\n flex: 0 0 auto;\n overflow: hidden;\n box-sizing: border-box;\n padding: 12px 8px 0;\n text-align: right;\n color: var(--nile-colors-neutral-400, #98a2b3);\n background: var(--nile-colors-neutral-50, #f9fafb);\n border-right: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n user-select: none;\n }\n\n .linenos-inner {\n will-change: transform;\n }\n\n .linenos-inner > div {\n height: 18px;\n }\n\n .input-wrap {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n }\n\n /* Highlight layer and textarea share the exact same box (offset for\n padding via top/left, extending to the edges for horizontal scroll),\n so the coloured text sits directly under the caret. */\n .hl,\n textarea {\n position: absolute;\n top: 12px;\n left: 16px;\n right: 0;\n bottom: 0;\n margin: 0;\n border: 0;\n padding: 0;\n font: inherit;\n line-height: inherit;\n tab-size: inherit;\n white-space: pre;\n word-wrap: normal;\n overflow-wrap: normal;\n box-sizing: border-box;\n }\n\n .hl {\n overflow: hidden;\n pointer-events: none;\n color: var(--nile-colors-neutral-900, #101828);\n }\n\n .hl > code {\n display: block;\n will-change: transform;\n }\n\n textarea {\n width: auto;\n resize: none;\n outline: none;\n overflow: auto;\n background: transparent;\n color: transparent;\n caret-color: var(--nile-colors-neutral-900, #101828);\n }\n\n /* Must be translucent: the textarea's text is transparent and the\n coloured code sits BEHIND it, so an opaque selection would hide the\n text. A tint lets the highlighted code show through the selection. */\n textarea::selection {\n background: rgba(41, 112, 255, 0.3);\n }\n textarea::-moz-selection {\n background: rgba(41, 112, 255, 0.3);\n }\n\n /* highlight.js token palette (Atom One Light), matching code blocks. */\n .hl .hljs-comment,\n .hl .hljs-quote { color: #a0a1a7; font-style: italic; }\n .hl .hljs-keyword,\n .hl .hljs-selector-tag,\n .hl .hljs-doctag { color: #a626a4; }\n .hl .hljs-name,\n .hl .hljs-selector-id,\n .hl .hljs-selector-class,\n .hl .hljs-tag { color: #e45649; }\n .hl .hljs-literal,\n .hl .hljs-built_in { color: #0184bb; }\n .hl .hljs-string,\n .hl .hljs-attribute,\n .hl .hljs-meta .hljs-string { color: #50a14f; }\n .hl .hljs-attr,\n .hl .hljs-variable,\n .hl .hljs-type,\n .hl .hljs-number { color: #986801; }\n .hl .hljs-symbol,\n .hl .hljs-meta,\n .hl .hljs-title { color: #4078f2; }\n\n /* Draggable divider between the code and preview panes. */\n .gutter {\n flex: 0 0 auto;\n position: relative;\n width: 1px;\n align-self: stretch;\n background: var(--nile-colors-neutral-300, #e4e7ec);\n cursor: col-resize;\n touch-action: none;\n }\n\n .gutter::before {\n content: '';\n position: absolute;\n inset: 0 -4px;\n }\n\n .gutter:hover,\n .body--dragging .gutter {\n background: var(--ng-colors-bg-brand-primary, #2970ff);\n }\n\n .pane--preview {\n flex: 1 1 0;\n overflow: auto;\n border-left: 1px solid var(--nile-colors-neutral-200, #eaecf0);\n background: var(--nile-colors-white-base, #ffffff);\n }\n\n nile-wysiwyg-preview {\n display: block;\n }\n\n .preview-empty {\n display: block;\n padding: 12px 16px;\n color: var(--nile-colors-neutral-500, #98a2b3);\n font-size: 12px;\n opacity: 0.7;\n }\n `,\n ];\n }\n\n protected willUpdate(changed: Map<string, unknown>): void {\n // Sync the draft (and thus preview/highlight) whenever the host sets value.\n if (changed.has('value')) this.draft = this.value;\n }\n\n /** The current (possibly edited) source text — what \"Done\" would apply. */\n public get currentValue(): string {\n return this.draft;\n }\n\n public focusInput(): void {\n this.updateComplete.then(() => this.textarea?.focus());\n }\n\n /** highlight.js-coloured HTML for the current draft (falls back to escaped). */\n private get highlighted(): string {\n if (!this.draft) return '';\n try {\n return hljs.highlight(this.draft, { language: 'xml' }).value;\n } catch {\n return this.draft.replace(/[&<>]/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;' }[c]!));\n }\n }\n\n private get lineCount(): number {\n return this.draft ? this.draft.split('\\n').length : 1;\n }\n\n /** Begins a pointer-driven resize of the split divider. */\n private startSplitDrag = (e: PointerEvent) => {\n const body = this.bodyEl;\n if (!body) return;\n e.preventDefault();\n this.splitDragging = true;\n\n const rect = body.getBoundingClientRect();\n const MIN = 0.15;\n const MAX = 0.85;\n\n const onMove = (ev: PointerEvent) => {\n if (rect.width === 0) return;\n const ratio = (ev.clientX - rect.left) / rect.width;\n this.splitRatio = Math.min(MAX, Math.max(MIN, ratio));\n };\n const onUp = () => {\n this.splitDragging = false;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n };\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n };\n\n /** Resets the divider to a 50/50 layout (double-click affordance). */\n private resetSplit = () => {\n this.splitRatio = 0.5;\n };\n\n private onInput = (e: Event) => {\n this.draft = (e.target as HTMLTextAreaElement).value;\n };\n\n /** Keeps the highlight layer and line-number gutter aligned with scroll. */\n private onScroll = (e: Event) => {\n const ta = e.target as HTMLTextAreaElement;\n if (this.highlightEl) {\n this.highlightEl.style.transform = `translate(${-ta.scrollLeft}px, ${-ta.scrollTop}px)`;\n }\n if (this.linenosEl) {\n this.linenosEl.style.transform = `translateY(${-ta.scrollTop}px)`;\n }\n };\n\n public render(): TemplateResult {\n const preview = sanitizeHtml(this.draft);\n const lines: TemplateResult[] = [];\n for (let i = 1; i <= this.lineCount; i += 1) lines.push(html`<div>${i}</div>`);\n return html`\n <div class=\"bar\" part=\"source-bar\">\n <span>HTML</span>\n <span class=\"actions\">\n <button type=\"button\" @click=${() => this.emit('wysiwyg-source-cancel')}>\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"primary\"\n @click=${() => this.emit('wysiwyg-source-apply', { html: this.draft })}\n >\n Done\n </button>\n </span>\n </div>\n <div class=${classMap({ body: true, 'body--dragging': this.splitDragging })}>\n <div class=\"pane pane--code\" style=\"flex: 0 0 ${this.splitRatio * 100}%\">\n <div class=\"linenos\" part=\"line-numbers\" aria-hidden=\"true\">\n <div class=\"linenos-inner\">${lines}</div>\n </div>\n <div class=\"input-wrap\">\n <pre class=\"hl\" aria-hidden=\"true\"><code>${unsafeHTML(this.highlighted)}</code></pre>\n <textarea\n part=\"source-textarea\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n wrap=\"off\"\n .value=${this.value}\n @input=${this.onInput}\n @scroll=${this.onScroll}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n this.emit('wysiwyg-source-cancel');\n }\n }}\n ></textarea>\n </div>\n </div>\n <div\n class=\"gutter\"\n part=\"gutter\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize source and preview\"\n title=\"Drag to resize · double-click to reset\"\n @pointerdown=${this.startSplitDrag}\n @dblclick=${this.resetSplit}\n ></div>\n <div class=\"pane pane--preview\" part=\"preview\">\n ${this.draft.trim()\n ? html`<nile-wysiwyg-preview .content=${preview}></nile-wysiwyg-preview>`\n : html`<span class=\"preview-empty\">Nothing to preview</span>`}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-source-view': NileWysiwygSourceView;\n }\n}\n"],"names":["hljs","registerLanguage","xml","NileWysiwygSourceView","_d","g","constructor","this","value","draft","splitRatio","splitDragging","startSplitDrag","e","body","bodyEl","preventDefault","rect","getBoundingClientRect","onMove","ev","width","ratio","clientX","left","Math","min","max","onUp","window","removeEventListener","addEventListener","resetSplit","onInput","target","onScroll","ta","highlightEl","style","transform","scrollLeft","scrollTop","linenosEl","_this","_inherits","_createClass","key","willUpdate","changed","has","get","currentValue","focusInput","updateComplete","then","_this2$textarea","textarea","focus","highlighted","highlight","language","_unused","replace","c","lineCount","split","length","render","_this3","preview","sanitizeHtml","lines","i","push","html","_templateObject","_taggedTemplateLiteral","_templateObject2","emit","classMap","unsafeHTML","stopPropagation","trim","_templateObject3","_templateObject4","css","_templateObject5","NileElement","__decorate","property","type","String","prototype","query","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"source-view.cjs.js","sources":["../../../../src/nile-wysiwyg-editor/ui/source-view.ts"],"sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport hljs from 'highlight.js/lib/core';\nimport xml from 'highlight.js/lib/languages/xml';\nimport NileElement from '../../internal/nile-element';\nimport { sanitizeHtml } from '../engine/sanitize';\nimport './preview';\n\n// HTML highlighting only — reuses the same lib the code-block feature already\n// bundles, so this adds no new dependency. Registration is idempotent.\nhljs.registerLanguage('xml', xml);\n\n/**\n * Raw HTML source editing mode. A split view: the raw HTML on the left, a\n * live rendered preview on the right, with a draggable divider between them\n * and a resizable body. The preview runs the same sanitizer the host applies\n * on the way back, so what you see is what the document becomes. Emits\n * `wysiwyg-source-apply` detail: { html } and `wysiwyg-source-cancel`.\n *\n * The code pane is a lightweight editor: a real `<textarea>` for input, with a\n * highlight.js-coloured layer painted behind it and a synced line-number\n * gutter. No heavyweight code-editor dependency.\n */\n@customElement('nile-wysiwyg-source-view')\nexport class NileWysiwygSourceView extends NileElement {\n @property({ type: String }) value = '';\n\n @query('textarea') private textarea?: HTMLTextAreaElement;\n\n @query('.hl > code') private highlightEl?: HTMLElement;\n\n @query('.linenos-inner') private linenosEl?: HTMLElement;\n\n @query('.body') private bodyEl?: HTMLElement;\n\n /** Current source text, drives the live preview, highlight and gutter. */\n @state() private draft = '';\n\n /**\n * Fraction of the body width given to the code pane (the rest is preview).\n * Clamped while dragging the divider.\n */\n @state() private splitRatio = 0.5;\n\n /** Whether the divider is currently being dragged. */\n @state() private splitDragging = false;\n\n public static get styles(): CSSResultArray {\n return [\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n min-height: var(--nile-wysiwyg-min-height, 200px);\n height: var(--nile-wysiwyg-source-height, 340px);\n max-height: var(\n --nile-wysiwyg-source-max-height,\n var(--nile-wysiwyg-max-height, 70vh)\n );\n resize: vertical;\n }\n\n .bar {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--nile-colors-neutral-600, var(--ng-colors-text-tertiary-600));\n border-bottom: 1px solid var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n background: var(--nile-wysiwyg-toolbar-bg, var(--nile-colors-neutral-50, var(--ng-colors-bg-secondary)));\n }\n\n .actions {\n display: flex;\n gap: 8px;\n }\n\n button {\n font: inherit;\n font-size: 12px;\n padding: 4px 12px;\n border-radius: 6px;\n border: 1px solid transparent;\n cursor: pointer;\n background: transparent;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n button.primary {\n background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));\n color: var(--ng-colors-text-white);\n }\n\n .body {\n flex: 1 1 auto;\n display: flex;\n align-items: stretch;\n overflow: hidden;\n min-height: 0;\n box-sizing: border-box;\n }\n\n .body--dragging {\n cursor: col-resize;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .body--dragging .pane {\n pointer-events: none;\n }\n\n .pane {\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n\n /* --- Lightweight code editor: gutter + highlighted textarea --- */\n .pane--code {\n display: flex;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n /* Shared code metrics, inherited by the gutter, highlight and textarea\n so every line lines up to the pixel. */\n font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);\n font-size: 12px;\n line-height: 18px;\n tab-size: 2;\n -moz-tab-size: 2;\n }\n\n .linenos {\n flex: 0 0 auto;\n overflow: hidden;\n box-sizing: border-box;\n padding: 12px 8px 0;\n text-align: right;\n color: var(--nile-colors-neutral-400, var(--ng-colors-text-quaternary-500));\n background: var(--nile-colors-neutral-50, var(--ng-colors-bg-secondary));\n border-right: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));\n user-select: none;\n }\n\n .linenos-inner {\n will-change: transform;\n }\n\n .linenos-inner > div {\n height: 18px;\n }\n\n .input-wrap {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n }\n\n /* Highlight layer and textarea share the exact same box (offset for\n padding via top/left, extending to the edges for horizontal scroll),\n so the coloured text sits directly under the caret. */\n .hl,\n textarea {\n position: absolute;\n top: 12px;\n left: 16px;\n right: 0;\n bottom: 0;\n margin: 0;\n border: 0;\n padding: 0;\n font: inherit;\n line-height: inherit;\n tab-size: inherit;\n white-space: pre;\n word-wrap: normal;\n overflow-wrap: normal;\n box-sizing: border-box;\n }\n\n .hl {\n overflow: hidden;\n pointer-events: none;\n color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary-900));\n }\n\n .hl > code {\n display: block;\n will-change: transform;\n }\n\n textarea {\n width: auto;\n resize: none;\n outline: none;\n overflow: auto;\n background: transparent;\n color: transparent;\n caret-color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary-900));\n }\n\n /* Must be translucent: the textarea's text is transparent and the\n coloured code sits BEHIND it, so an opaque selection would hide the\n text. A tint lets the highlighted code show through the selection. */\n textarea::selection {\n background: rgba(41, 112, 255, 0.3);\n }\n textarea::-moz-selection {\n background: rgba(41, 112, 255, 0.3);\n }\n\n /* highlight.js token palette (Atom One Light), matching code blocks. */\n .hl .hljs-comment,\n .hl .hljs-quote { color: var(--ng-componentcolors-utility-gray-500); font-style: italic; }\n .hl .hljs-keyword,\n .hl .hljs-selector-tag,\n .hl .hljs-doctag { color: var(--ng-componentcolors-utility-purple-600); }\n .hl .hljs-name,\n .hl .hljs-selector-id,\n .hl .hljs-selector-class,\n .hl .hljs-tag { color: var(--ng-componentcolors-utility-error-600); }\n .hl .hljs-literal,\n .hl .hljs-built_in { color: var(--ng-componentcolors-utility-blue-600); }\n .hl .hljs-string,\n .hl .hljs-attribute,\n .hl .hljs-meta .hljs-string { color: var(--ng-componentcolors-utility-green-600); }\n .hl .hljs-attr,\n .hl .hljs-variable,\n .hl .hljs-type,\n .hl .hljs-number { color: var(--ng-componentcolors-utility-orange-600); }\n .hl .hljs-symbol,\n .hl .hljs-meta,\n .hl .hljs-title { color: var(--ng-componentcolors-utility-indigo-600); }\n\n /* Draggable divider between the code and preview panes. */\n .gutter {\n flex: 0 0 auto;\n position: relative;\n width: 1px;\n align-self: stretch;\n background: var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n cursor: col-resize;\n touch-action: none;\n }\n\n .gutter::before {\n content: '';\n position: absolute;\n inset: 0 -4px;\n }\n\n .gutter:hover,\n .body--dragging .gutter {\n background: var(--ng-colors-bg-brand-primary);\n }\n\n .pane--preview {\n flex: 1 1 0;\n overflow: auto;\n border-left: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n }\n\n nile-wysiwyg-preview {\n display: block;\n }\n\n .preview-empty {\n display: block;\n padding: 12px 16px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));\n font-size: 12px;\n opacity: 0.7;\n }\n `,\n ];\n }\n\n protected willUpdate(changed: Map<string, unknown>): void {\n // Sync the draft (and thus preview/highlight) whenever the host sets value.\n if (changed.has('value')) this.draft = this.value;\n }\n\n /** The current (possibly edited) source text — what \"Done\" would apply. */\n public get currentValue(): string {\n return this.draft;\n }\n\n public focusInput(): void {\n this.updateComplete.then(() => this.textarea?.focus());\n }\n\n /** highlight.js-coloured HTML for the current draft (falls back to escaped). */\n private get highlighted(): string {\n if (!this.draft) return '';\n try {\n return hljs.highlight(this.draft, { language: 'xml' }).value;\n } catch {\n return this.draft.replace(/[&<>]/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;' }[c]!));\n }\n }\n\n private get lineCount(): number {\n return this.draft ? this.draft.split('\\n').length : 1;\n }\n\n /** Begins a pointer-driven resize of the split divider. */\n private startSplitDrag = (e: PointerEvent) => {\n const body = this.bodyEl;\n if (!body) return;\n e.preventDefault();\n this.splitDragging = true;\n\n const rect = body.getBoundingClientRect();\n const MIN = 0.15;\n const MAX = 0.85;\n\n const onMove = (ev: PointerEvent) => {\n if (rect.width === 0) return;\n const ratio = (ev.clientX - rect.left) / rect.width;\n this.splitRatio = Math.min(MAX, Math.max(MIN, ratio));\n };\n const onUp = () => {\n this.splitDragging = false;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n };\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n };\n\n /** Resets the divider to a 50/50 layout (double-click affordance). */\n private resetSplit = () => {\n this.splitRatio = 0.5;\n };\n\n private onInput = (e: Event) => {\n this.draft = (e.target as HTMLTextAreaElement).value;\n };\n\n /** Keeps the highlight layer and line-number gutter aligned with scroll. */\n private onScroll = (e: Event) => {\n const ta = e.target as HTMLTextAreaElement;\n if (this.highlightEl) {\n this.highlightEl.style.transform = `translate(${-ta.scrollLeft}px, ${-ta.scrollTop}px)`;\n }\n if (this.linenosEl) {\n this.linenosEl.style.transform = `translateY(${-ta.scrollTop}px)`;\n }\n };\n\n public render(): TemplateResult {\n const preview = sanitizeHtml(this.draft);\n const lines: TemplateResult[] = [];\n for (let i = 1; i <= this.lineCount; i += 1) lines.push(html`<div>${i}</div>`);\n return html`\n <div class=\"bar\" part=\"source-bar\">\n <span>HTML</span>\n <span class=\"actions\">\n <button type=\"button\" @click=${() => this.emit('wysiwyg-source-cancel')}>\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"primary\"\n @click=${() => this.emit('wysiwyg-source-apply', { html: this.draft })}\n >\n Done\n </button>\n </span>\n </div>\n <div class=${classMap({ body: true, 'body--dragging': this.splitDragging })}>\n <div class=\"pane pane--code\" style=\"flex: 0 0 ${this.splitRatio * 100}%\">\n <div class=\"linenos\" part=\"line-numbers\" aria-hidden=\"true\">\n <div class=\"linenos-inner\">${lines}</div>\n </div>\n <div class=\"input-wrap\">\n <pre class=\"hl\" aria-hidden=\"true\"><code>${unsafeHTML(this.highlighted)}</code></pre>\n <textarea\n part=\"source-textarea\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n wrap=\"off\"\n .value=${this.value}\n @input=${this.onInput}\n @scroll=${this.onScroll}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n this.emit('wysiwyg-source-cancel');\n }\n }}\n ></textarea>\n </div>\n </div>\n <div\n class=\"gutter\"\n part=\"gutter\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize source and preview\"\n title=\"Drag to resize · double-click to reset\"\n @pointerdown=${this.startSplitDrag}\n @dblclick=${this.resetSplit}\n ></div>\n <div class=\"pane pane--preview\" part=\"preview\">\n ${this.draft.trim()\n ? html`<nile-wysiwyg-preview .content=${preview}></nile-wysiwyg-preview>`\n : html`<span class=\"preview-empty\">Nothing to preview</span>`}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-source-view': NileWysiwygSourceView;\n }\n}\n"],"names":["hljs","registerLanguage","xml","NileWysiwygSourceView","_d","g","constructor","this","value","draft","splitRatio","splitDragging","startSplitDrag","e","body","bodyEl","preventDefault","rect","getBoundingClientRect","onMove","ev","width","ratio","clientX","left","Math","min","max","onUp","window","removeEventListener","addEventListener","resetSplit","onInput","target","onScroll","ta","highlightEl","style","transform","scrollLeft","scrollTop","linenosEl","_this","_inherits","_createClass","key","willUpdate","changed","has","get","currentValue","focusInput","updateComplete","then","_this2$textarea","textarea","focus","highlighted","highlight","language","_unused","replace","c","lineCount","split","length","render","_this3","preview","sanitizeHtml","lines","i","push","html","_templateObject","_taggedTemplateLiteral","_templateObject2","emit","classMap","unsafeHTML","stopPropagation","trim","_templateObject3","_templateObject4","css","_templateObject5","NileElement","__decorate","property","type","String","prototype","query","state","customElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{property as r,query as o,state as s,customElement as l}from"lit/decorators.js";import{classMap as n}from"lit/directives/class-map.js";import{unsafeHTML as a}from"lit/directives/unsafe-html.js";import{H as h,x as c}from"../../xml-25c4108a.esm.js";import{N as d}from"../../internal/nile-element.esm.js";import{s as p}from"../engine/sanitize.esm.js";import"./preview.esm.js";import"../../internal/accessibility/a11y.state.enum.esm.js";import"../../internal/accessibility/a11y.property.enum.esm.js";import"../../internal/accessibility/role.enum.esm.js";import"../engine/plugins/embeds.esm.js";import"../../index-6f3fa4ab.esm.js";import"../nile-wysiwyg-editor.css.esm.js";h.registerLanguage("xml",c);let g=class extends d{constructor(){super(...arguments),this.value="",this.draft="",this.splitRatio=.5,this.splitDragging=!1,this.startSplitDrag=e=>{const t=this.bodyEl;if(!t)return;e.preventDefault(),this.splitDragging=!0;const i=t.getBoundingClientRect(),r=e=>{if(0===i.width)return;const t=(e.clientX-i.left)/i.width;this.splitRatio=Math.min(.85,Math.max(.15,t))},o=()=>{this.splitDragging=!1,window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",o)};window.addEventListener("pointermove",r),window.addEventListener("pointerup",o)},this.resetSplit=()=>{this.splitRatio=.5},this.onInput=e=>{this.draft=e.target.value},this.onScroll=e=>{const t=e.target;this.highlightEl&&(this.highlightEl.style.transform=`translate(${-t.scrollLeft}px, ${-t.scrollTop}px)`),this.linenosEl&&(this.linenosEl.style.transform=`translateY(${-t.scrollTop}px)`)}}static get styles(){return[t`
1
+ import{__decorate as e}from"tslib";import{css as t,html as r}from"lit";import{property as o,query as i,state as n,customElement as s}from"lit/decorators.js";import{classMap as l}from"lit/directives/class-map.js";import{unsafeHTML as a}from"lit/directives/unsafe-html.js";import{H as c,x as h}from"../../xml-25c4108a.esm.js";import{N as d}from"../../internal/nile-element.esm.js";import{s as p}from"../engine/sanitize.esm.js";import"./preview.esm.js";import"../../internal/accessibility/a11y.state.enum.esm.js";import"../../internal/accessibility/a11y.property.enum.esm.js";import"../../internal/accessibility/role.enum.esm.js";import"../engine/plugins/embeds.esm.js";import"../../index-6f3fa4ab.esm.js";import"../nile-wysiwyg-editor.css.esm.js";c.registerLanguage("xml",h);let g=class extends d{constructor(){super(...arguments),this.value="",this.draft="",this.splitRatio=.5,this.splitDragging=!1,this.startSplitDrag=e=>{const t=this.bodyEl;if(!t)return;e.preventDefault(),this.splitDragging=!0;const r=t.getBoundingClientRect(),o=e=>{if(0===r.width)return;const t=(e.clientX-r.left)/r.width;this.splitRatio=Math.min(.85,Math.max(.15,t))},i=()=>{this.splitDragging=!1,window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",i)};window.addEventListener("pointermove",o),window.addEventListener("pointerup",i)},this.resetSplit=()=>{this.splitRatio=.5},this.onInput=e=>{this.draft=e.target.value},this.onScroll=e=>{const t=e.target;this.highlightEl&&(this.highlightEl.style.transform=`translate(${-t.scrollLeft}px, ${-t.scrollTop}px)`),this.linenosEl&&(this.linenosEl.style.transform=`translateY(${-t.scrollTop}px)`)}}static get styles(){return[t`
2
2
  :host {
3
3
  display: flex;
4
4
  flex-direction: column;
@@ -20,9 +20,9 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
20
20
  justify-content: space-between;
21
21
  padding: 6px 12px;
22
22
  font-size: 12px;
23
- color: var(--nile-colors-neutral-600, #475467);
24
- border-bottom: 1px solid var(--nile-colors-neutral-300, #e4e7ec);
25
- background: var(--nile-wysiwyg-toolbar-bg, var(--nile-colors-neutral-50, #f9fafb));
23
+ color: var(--nile-colors-neutral-600, var(--ng-colors-text-tertiary-600));
24
+ border-bottom: 1px solid var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));
25
+ background: var(--nile-wysiwyg-toolbar-bg, var(--nile-colors-neutral-50, var(--ng-colors-bg-secondary)));
26
26
  }
27
27
 
28
28
  .actions {
@@ -38,12 +38,12 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
38
38
  border: 1px solid transparent;
39
39
  cursor: pointer;
40
40
  background: transparent;
41
- color: var(--nile-colors-neutral-700, #344054);
41
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
42
42
  }
43
43
 
44
44
  button.primary {
45
- background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));
46
- color: #ffffff;
45
+ background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));
46
+ color: var(--ng-colors-text-white);
47
47
  }
48
48
 
49
49
  .body {
@@ -74,7 +74,7 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
74
74
  /* --- Lightweight code editor: gutter + highlighted textarea --- */
75
75
  .pane--code {
76
76
  display: flex;
77
- background: var(--nile-colors-white-base, #ffffff);
77
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
78
78
  /* Shared code metrics, inherited by the gutter, highlight and textarea
79
79
  so every line lines up to the pixel. */
80
80
  font-family: var(--nile-wysiwyg-code-font, ui-monospace, SFMono-Regular, Menlo, monospace);
@@ -90,9 +90,9 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
90
90
  box-sizing: border-box;
91
91
  padding: 12px 8px 0;
92
92
  text-align: right;
93
- color: var(--nile-colors-neutral-400, #98a2b3);
94
- background: var(--nile-colors-neutral-50, #f9fafb);
95
- border-right: 1px solid var(--nile-colors-neutral-200, #eaecf0);
93
+ color: var(--nile-colors-neutral-400, var(--ng-colors-text-quaternary-500));
94
+ background: var(--nile-colors-neutral-50, var(--ng-colors-bg-secondary));
95
+ border-right: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));
96
96
  user-select: none;
97
97
  }
98
98
 
@@ -136,7 +136,7 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
136
136
  .hl {
137
137
  overflow: hidden;
138
138
  pointer-events: none;
139
- color: var(--nile-colors-neutral-900, #101828);
139
+ color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary-900));
140
140
  }
141
141
 
142
142
  .hl > code {
@@ -151,7 +151,7 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
151
151
  overflow: auto;
152
152
  background: transparent;
153
153
  color: transparent;
154
- caret-color: var(--nile-colors-neutral-900, #101828);
154
+ caret-color: var(--nile-colors-neutral-900, var(--ng-colors-text-primary-900));
155
155
  }
156
156
 
157
157
  /* Must be translucent: the textarea's text is transparent and the
@@ -166,26 +166,26 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
166
166
 
167
167
  /* highlight.js token palette (Atom One Light), matching code blocks. */
168
168
  .hl .hljs-comment,
169
- .hl .hljs-quote { color: #a0a1a7; font-style: italic; }
169
+ .hl .hljs-quote { color: var(--ng-componentcolors-utility-gray-500); font-style: italic; }
170
170
  .hl .hljs-keyword,
171
171
  .hl .hljs-selector-tag,
172
- .hl .hljs-doctag { color: #a626a4; }
172
+ .hl .hljs-doctag { color: var(--ng-componentcolors-utility-purple-600); }
173
173
  .hl .hljs-name,
174
174
  .hl .hljs-selector-id,
175
175
  .hl .hljs-selector-class,
176
- .hl .hljs-tag { color: #e45649; }
176
+ .hl .hljs-tag { color: var(--ng-componentcolors-utility-error-600); }
177
177
  .hl .hljs-literal,
178
- .hl .hljs-built_in { color: #0184bb; }
178
+ .hl .hljs-built_in { color: var(--ng-componentcolors-utility-blue-600); }
179
179
  .hl .hljs-string,
180
180
  .hl .hljs-attribute,
181
- .hl .hljs-meta .hljs-string { color: #50a14f; }
181
+ .hl .hljs-meta .hljs-string { color: var(--ng-componentcolors-utility-green-600); }
182
182
  .hl .hljs-attr,
183
183
  .hl .hljs-variable,
184
184
  .hl .hljs-type,
185
- .hl .hljs-number { color: #986801; }
185
+ .hl .hljs-number { color: var(--ng-componentcolors-utility-orange-600); }
186
186
  .hl .hljs-symbol,
187
187
  .hl .hljs-meta,
188
- .hl .hljs-title { color: #4078f2; }
188
+ .hl .hljs-title { color: var(--ng-componentcolors-utility-indigo-600); }
189
189
 
190
190
  /* Draggable divider between the code and preview panes. */
191
191
  .gutter {
@@ -193,7 +193,7 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
193
193
  position: relative;
194
194
  width: 1px;
195
195
  align-self: stretch;
196
- background: var(--nile-colors-neutral-300, #e4e7ec);
196
+ background: var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));
197
197
  cursor: col-resize;
198
198
  touch-action: none;
199
199
  }
@@ -206,14 +206,14 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
206
206
 
207
207
  .gutter:hover,
208
208
  .body--dragging .gutter {
209
- background: var(--ng-colors-bg-brand-primary, #2970ff);
209
+ background: var(--ng-colors-bg-brand-primary);
210
210
  }
211
211
 
212
212
  .pane--preview {
213
213
  flex: 1 1 0;
214
214
  overflow: auto;
215
- border-left: 1px solid var(--nile-colors-neutral-200, #eaecf0);
216
- background: var(--nile-colors-white-base, #ffffff);
215
+ border-left: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));
216
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
217
217
  }
218
218
 
219
219
  nile-wysiwyg-preview {
@@ -223,11 +223,11 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
223
223
  .preview-empty {
224
224
  display: block;
225
225
  padding: 12px 16px;
226
- color: var(--nile-colors-neutral-500, #98a2b3);
226
+ color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));
227
227
  font-size: 12px;
228
228
  opacity: 0.7;
229
229
  }
230
- `]}willUpdate(e){e.has("value")&&(this.draft=this.value)}get currentValue(){return this.draft}focusInput(){this.updateComplete.then((()=>this.textarea?.focus()))}get highlighted(){if(!this.draft)return"";try{return h.highlight(this.draft,{language:"xml"}).value}catch{return this.draft.replace(/[&<>]/g,(e=>({"&":"&amp;","<":"&lt;",">":"&gt;"}[e])))}}get lineCount(){return this.draft?this.draft.split("\n").length:1}render(){const e=p(this.draft),t=[];for(let e=1;e<=this.lineCount;e+=1)t.push(i`<div>${e}</div>`);return i`
230
+ `]}willUpdate(e){e.has("value")&&(this.draft=this.value)}get currentValue(){return this.draft}focusInput(){this.updateComplete.then((()=>this.textarea?.focus()))}get highlighted(){if(!this.draft)return"";try{return c.highlight(this.draft,{language:"xml"}).value}catch{return this.draft.replace(/[&<>]/g,(e=>({"&":"&amp;","<":"&lt;",">":"&gt;"}[e])))}}get lineCount(){return this.draft?this.draft.split("\n").length:1}render(){const e=p(this.draft),t=[];for(let e=1;e<=this.lineCount;e+=1)t.push(r`<div>${e}</div>`);return r`
231
231
  <div class="bar" part="source-bar">
232
232
  <span>HTML</span>
233
233
  <span class="actions">
@@ -243,7 +243,7 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
243
243
  </button>
244
244
  </span>
245
245
  </div>
246
- <div class=${n({body:!0,"body--dragging":this.splitDragging})}>
246
+ <div class=${l({body:!0,"body--dragging":this.splitDragging})}>
247
247
  <div class="pane pane--code" style="flex: 0 0 ${100*this.splitRatio}%">
248
248
  <div class="linenos" part="line-numbers" aria-hidden="true">
249
249
  <div class="linenos-inner">${t}</div>
@@ -274,7 +274,7 @@ import{__decorate as e}from"tslib";import{css as t,html as i}from"lit";import{pr
274
274
  @dblclick=${this.resetSplit}
275
275
  ></div>
276
276
  <div class="pane pane--preview" part="preview">
277
- ${this.draft.trim()?i`<nile-wysiwyg-preview .content=${e}></nile-wysiwyg-preview>`:i`<span class="preview-empty">Nothing to preview</span>`}
277
+ ${this.draft.trim()?r`<nile-wysiwyg-preview .content=${e}></nile-wysiwyg-preview>`:r`<span class="preview-empty">Nothing to preview</span>`}
278
278
  </div>
279
279
  </div>
280
- `}};e([r({type:String})],g.prototype,"value",void 0),e([o("textarea")],g.prototype,"textarea",void 0),e([o(".hl > code")],g.prototype,"highlightEl",void 0),e([o(".linenos-inner")],g.prototype,"linenosEl",void 0),e([o(".body")],g.prototype,"bodyEl",void 0),e([s()],g.prototype,"draft",void 0),e([s()],g.prototype,"splitRatio",void 0),e([s()],g.prototype,"splitDragging",void 0),g=e([l("nile-wysiwyg-source-view")],g);
280
+ `}};e([o({type:String})],g.prototype,"value",void 0),e([i("textarea")],g.prototype,"textarea",void 0),e([i(".hl > code")],g.prototype,"highlightEl",void 0),e([i(".linenos-inner")],g.prototype,"linenosEl",void 0),e([i(".body")],g.prototype,"bodyEl",void 0),e([n()],g.prototype,"draft",void 0),e([n()],g.prototype,"splitRatio",void 0),e([n()],g.prototype,"splitDragging",void 0),g=e([s("nile-wysiwyg-source-view")],g);