@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
@@ -21,8 +21,8 @@ export const styles = css `
21
21
  gap: 6px;
22
22
  padding: 8px;
23
23
  border-bottom: 1px solid
24
- var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd));
25
- background: var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff));
24
+ var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));
25
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
26
26
  border-radius: 8px 8px 0 0;
27
27
  box-sizing: border-box;
28
28
  }
@@ -31,7 +31,7 @@ export const styles = css `
31
31
  width: 1px;
32
32
  height: 24px;
33
33
  margin: 0 4px;
34
- background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd));
34
+ background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));
35
35
  }
36
36
 
37
37
  button.toolbar__button {
@@ -46,18 +46,18 @@ export const styles = css `
46
46
  background: transparent;
47
47
  border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md, 8px));
48
48
  cursor: pointer;
49
- color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900, #101828));
49
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
50
50
  font-family: inherit;
51
51
  font-size: 14px;
52
52
  font-weight: 600;
53
53
  }
54
54
 
55
55
  button.toolbar__button:hover:not(:disabled) {
56
- background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary, #f2f4f7));
56
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
57
57
  }
58
58
 
59
59
  button.toolbar__button[data-active] {
60
- background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));
60
+ background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50));
61
61
  }
62
62
 
63
63
  button.toolbar__button:disabled {
@@ -83,14 +83,14 @@ export const styles = css `
83
83
  background: transparent;
84
84
  border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md, 8px));
85
85
  cursor: pointer;
86
- color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900, #101828));
86
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
87
87
  font-family: inherit;
88
88
  font-size: 13px;
89
89
  white-space: nowrap;
90
90
  }
91
91
 
92
92
  button.toolbar__dd-trigger:hover:not(:disabled) {
93
- background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary, #f2f4f7));
93
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
94
94
  }
95
95
 
96
96
  button.toolbar__dd-trigger:disabled {
@@ -107,9 +107,9 @@ export const styles = css `
107
107
  max-height: 260px;
108
108
  overflow-y: auto;
109
109
  padding: 4px;
110
- background: var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff));
110
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
111
111
  border: 1px solid
112
- var(--nile-colors-neutral-300, var(--ng-colors-border-secondary, #e4e7ec));
112
+ var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));
113
113
  border-radius: 8px;
114
114
  box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);
115
115
  box-sizing: border-box;
@@ -122,20 +122,20 @@ export const styles = css `
122
122
  border-radius: 6px;
123
123
  cursor: pointer;
124
124
  font-size: 13px;
125
- color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900, #101828));
125
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
126
126
  white-space: nowrap;
127
127
  }
128
128
 
129
129
  .toolbar__dd-item:hover {
130
- background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary, #f2f4f7));
130
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
131
131
  }
132
132
 
133
133
  .toolbar__dd-item[data-active] {
134
134
  background: var(
135
135
  --nile-colors-primary-50,
136
- var(--ng-componentcolors-utility-blue-50, #eff4ff)
136
+ var(--ng-componentcolors-utility-blue-50)
137
137
  );
138
- color: var(--nile-colors-primary-700, #1d4ed8);
138
+ color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700));
139
139
  }
140
140
 
141
141
  /* --- Color pickers, nile-rte-color style --- */
@@ -179,9 +179,9 @@ export const styles = css `
179
179
  top: calc(100% + 6px);
180
180
  left: 0;
181
181
  z-index: 30;
182
- background: var(--nile-colors-white-base, #ffffff);
182
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
183
183
  border: 1px solid
184
- var(--nile-colors-neutral-300, var(--ng-colors-border-secondary, #e4e7ec));
184
+ var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));
185
185
  border-radius: 8px;
186
186
  box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);
187
187
  box-sizing: border-box;
@@ -212,9 +212,9 @@ export const styles = css `
212
212
  align-items: center;
213
213
  gap: 6px;
214
214
  padding: 8px;
215
- background: var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff));
215
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
216
216
  border: 1px solid
217
- var(--nile-colors-neutral-300, var(--ng-colors-border-secondary, #e4e7ec));
217
+ var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));
218
218
  border-radius: 8px;
219
219
  box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);
220
220
  box-sizing: border-box;
@@ -224,7 +224,7 @@ export const styles = css `
224
224
  width: 1px;
225
225
  height: 24px;
226
226
  margin: 0 4px;
227
- background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd));
227
+ background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));
228
228
  }
229
229
  `;
230
230
  //# sourceMappingURL=nile-wysiwyg-toolbar.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nile-wysiwyg-toolbar.css.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NxB,CAAC","sourcesContent":["import { css } from 'lit';\n\n/**\n * Toolbar styled to match nile-rich-text-editor: white toolbar, 32×32\n * borderless buttons, dropdown-button selects with menu panels,\n * swatch-palette color pickers, 24px dividers.\n */\nexport const styles = css`\n :host {\n display: block;\n font-family: var(\n --nile-font-family-sans-serif,\n var(--ng-font-family-body, system-ui, -apple-system, sans-serif)\n );\n }\n\n .toolbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid\n var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff));\n border-radius: 8px 8px 0 0;\n box-sizing: border-box;\n }\n\n .toolbar__divider {\n width: 1px;\n height: 24px;\n margin: 0 4px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd));\n }\n\n button.toolbar__button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0 6px;\n box-sizing: border-box;\n border: none;\n background: transparent;\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md, 8px));\n cursor: pointer;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900, #101828));\n font-family: inherit;\n font-size: 14px;\n font-weight: 600;\n }\n\n button.toolbar__button:hover:not(:disabled) {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary, #f2f4f7));\n }\n\n button.toolbar__button[data-active] {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));\n }\n\n button.toolbar__button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n /* --- Dropdown selects (heading / font / size), nile-rte-select style --- */\n .toolbar__dropdown {\n position: relative;\n display: inline-flex;\n }\n\n button.toolbar__dd-trigger {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n min-width: 32px;\n height: 32px;\n padding: 0 6px 0 10px;\n box-sizing: border-box;\n border: none;\n background: transparent;\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md, 8px));\n cursor: pointer;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900, #101828));\n font-family: inherit;\n font-size: 13px;\n white-space: nowrap;\n }\n\n button.toolbar__dd-trigger:hover:not(:disabled) {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary, #f2f4f7));\n }\n\n button.toolbar__dd-trigger:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .toolbar__dd-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 30;\n min-width: 140px;\n max-height: 260px;\n overflow-y: auto;\n padding: 4px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff));\n border: 1px solid\n var(--nile-colors-neutral-300, var(--ng-colors-border-secondary, #e4e7ec));\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n box-sizing: border-box;\n }\n\n .toolbar__dd-item {\n display: flex;\n align-items: center;\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900, #101828));\n white-space: nowrap;\n }\n\n .toolbar__dd-item:hover {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary, #f2f4f7));\n }\n\n .toolbar__dd-item[data-active] {\n background: var(\n --nile-colors-primary-50,\n var(--ng-componentcolors-utility-blue-50, #eff4ff)\n );\n color: var(--nile-colors-primary-700, #1d4ed8);\n }\n\n /* --- Color pickers, nile-rte-color style --- */\n .toolbar__color {\n position: relative;\n display: inline-flex;\n }\n\n .toolbar__color .glyph-stack {\n display: grid;\n align-items: center;\n justify-items: center;\n line-height: 1;\n pointer-events: none;\n }\n\n .toolbar__color .glyph {\n font-size: 14px;\n margin-bottom: 2px;\n font-weight: 400;\n }\n\n .toolbar__color .underline {\n width: 18px;\n height: 3px;\n border-radius: 2px;\n }\n\n .toolbar__color .swatch-box {\n width: 18px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.35);\n pointer-events: none;\n box-sizing: border-box;\n }\n\n /* Floating panel that hosts the inline nile-color-picker. */\n .toolbar__color-panel {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n z-index: 30;\n background: var(--nile-colors-white-base, #ffffff);\n border: 1px solid\n var(--nile-colors-neutral-300, var(--ng-colors-border-secondary, #e4e7ec));\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n box-sizing: border-box;\n }\n\n /* --- Overflow (\"more\" / 3-dot) menu --- */\n /* The 3-dot button stays in its normal place in the toolbar flow. */\n .toolbar__overflow {\n position: relative;\n display: inline-flex;\n }\n\n /* Panel drops directly beneath the 3-dot button, aligned to its left edge and\n extending right, so it opens wherever the button sits. width:max-content\n sizes it to exactly its controls (rather than collapsing to the 32px\n button's shrink-to-fit width); the max-width cap wraps a full menu onto\n multiple rows instead of running off-screen. */\n .toolbar__overflow-panel {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n right: auto;\n width: max-content;\n max-width: min(360px, calc(100vw - 32px));\n z-index: 31;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n padding: 8px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary, #ffffff));\n border: 1px solid\n var(--nile-colors-neutral-300, var(--ng-colors-border-secondary, #e4e7ec));\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n box-sizing: border-box;\n }\n\n .toolbar__overflow-divider {\n width: 1px;\n height: 24px;\n margin: 0 4px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral, #d0d5dd));\n }\n`;\n"]}
1
+ {"version":3,"file":"nile-wysiwyg-toolbar.css.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/nile-wysiwyg-toolbar/nile-wysiwyg-toolbar.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NxB,CAAC","sourcesContent":["import { css } from 'lit';\n\n/**\n * Toolbar styled to match nile-rich-text-editor: white toolbar, 32×32\n * borderless buttons, dropdown-button selects with menu panels,\n * swatch-palette color pickers, 24px dividers.\n */\nexport const styles = css`\n :host {\n display: block;\n font-family: var(\n --nile-font-family-sans-serif,\n var(--ng-font-family-body, system-ui, -apple-system, sans-serif)\n );\n }\n\n .toolbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid\n var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 8px 8px 0 0;\n box-sizing: border-box;\n }\n\n .toolbar__divider {\n width: 1px;\n height: 24px;\n margin: 0 4px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n }\n\n button.toolbar__button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0 6px;\n box-sizing: border-box;\n border: none;\n background: transparent;\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md, 8px));\n cursor: pointer;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n font-family: inherit;\n font-size: 14px;\n font-weight: 600;\n }\n\n button.toolbar__button:hover:not(:disabled) {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n button.toolbar__button[data-active] {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50));\n }\n\n button.toolbar__button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n /* --- Dropdown selects (heading / font / size), nile-rte-select style --- */\n .toolbar__dropdown {\n position: relative;\n display: inline-flex;\n }\n\n button.toolbar__dd-trigger {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n min-width: 32px;\n height: 32px;\n padding: 0 6px 0 10px;\n box-sizing: border-box;\n border: none;\n background: transparent;\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md, 8px));\n cursor: pointer;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n font-family: inherit;\n font-size: 13px;\n white-space: nowrap;\n }\n\n button.toolbar__dd-trigger:hover:not(:disabled) {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n button.toolbar__dd-trigger:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .toolbar__dd-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 30;\n min-width: 140px;\n max-height: 260px;\n overflow-y: auto;\n padding: 4px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border: 1px solid\n var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n box-sizing: border-box;\n }\n\n .toolbar__dd-item {\n display: flex;\n align-items: center;\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n white-space: nowrap;\n }\n\n .toolbar__dd-item:hover {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .toolbar__dd-item[data-active] {\n background: var(\n --nile-colors-primary-50,\n var(--ng-componentcolors-utility-blue-50)\n );\n color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700));\n }\n\n /* --- Color pickers, nile-rte-color style --- */\n .toolbar__color {\n position: relative;\n display: inline-flex;\n }\n\n .toolbar__color .glyph-stack {\n display: grid;\n align-items: center;\n justify-items: center;\n line-height: 1;\n pointer-events: none;\n }\n\n .toolbar__color .glyph {\n font-size: 14px;\n margin-bottom: 2px;\n font-weight: 400;\n }\n\n .toolbar__color .underline {\n width: 18px;\n height: 3px;\n border-radius: 2px;\n }\n\n .toolbar__color .swatch-box {\n width: 18px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.35);\n pointer-events: none;\n box-sizing: border-box;\n }\n\n /* Floating panel that hosts the inline nile-color-picker. */\n .toolbar__color-panel {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n z-index: 30;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border: 1px solid\n var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n box-sizing: border-box;\n }\n\n /* --- Overflow (\"more\" / 3-dot) menu --- */\n /* The 3-dot button stays in its normal place in the toolbar flow. */\n .toolbar__overflow {\n position: relative;\n display: inline-flex;\n }\n\n /* Panel drops directly beneath the 3-dot button, aligned to its left edge and\n extending right, so it opens wherever the button sits. width:max-content\n sizes it to exactly its controls (rather than collapsing to the 32px\n button's shrink-to-fit width); the max-width cap wraps a full menu onto\n multiple rows instead of running off-screen. */\n .toolbar__overflow-panel {\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n right: auto;\n width: max-content;\n max-width: min(360px, calc(100vw - 32px));\n z-index: 31;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n padding: 8px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border: 1px solid\n var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n box-sizing: border-box;\n }\n\n .toolbar__overflow-divider {\n width: 1px;\n height: 24px;\n margin: 0 4px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n }\n`;\n"]}
@@ -35,8 +35,8 @@ let NileWysiwygBookmarkPanel = class NileWysiwygBookmarkPanel extends NileElemen
35
35
  gap: 8px;
36
36
  min-width: 280px;
37
37
  padding: 12px;
38
- background: var(--nile-wysiwyg-popover-bg, #ffffff);
39
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
38
+ background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));
39
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
40
40
  border-radius: var(--nile-wysiwyg-radius, 8px);
41
41
  box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));
42
42
  font-size: 13px;
@@ -46,29 +46,29 @@ let NileWysiwygBookmarkPanel = class NileWysiwygBookmarkPanel extends NileElemen
46
46
  display: flex;
47
47
  flex-direction: column;
48
48
  gap: 4px;
49
- color: var(--nile-colors-neutral-700, #344054);
49
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
50
50
  }
51
51
 
52
52
  input {
53
53
  font: inherit;
54
54
  padding: 6px 8px;
55
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
55
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
56
56
  border-radius: 6px;
57
57
  outline: none;
58
58
  }
59
59
 
60
60
  input:focus {
61
- border-color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));
61
+ border-color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));
62
62
  }
63
63
 
64
64
  .hint {
65
65
  font-size: 12px;
66
- color: var(--nile-colors-neutral-500, #98a2b3);
66
+ color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));
67
67
  }
68
68
 
69
69
  .error {
70
70
  font-size: 12px;
71
- color: var(--nile-colors-error-600, #d92d20);
71
+ color: var(--nile-colors-error-600, var(--ng-componentcolors-utility-error-600));
72
72
  }
73
73
 
74
74
  .actions {
@@ -84,12 +84,12 @@ let NileWysiwygBookmarkPanel = class NileWysiwygBookmarkPanel extends NileElemen
84
84
  border: 1px solid transparent;
85
85
  cursor: pointer;
86
86
  background: transparent;
87
- color: var(--nile-colors-neutral-700, #344054);
87
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
88
88
  }
89
89
 
90
90
  button.primary {
91
- background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));
92
- color: #ffffff;
91
+ background: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));
92
+ color: var(--ng-colors-text-white);
93
93
  }
94
94
  `,
95
95
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"bookmark-panel.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/bookmark-panel.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,WAAW,MAAM,6BAA6B,CAAC;AAEtD;;;GAGG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,WAAW;IAAlD;;QACuC,SAAI,GAAG,KAAK,CAAC;QAExC,UAAK,GAAG,EAAE,CAAC;IAwI9B,CAAC;IApIQ,MAAM,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6EF;SACF,CAAC;IACJ,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,uEAAuE;QACvE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAA;;;;kBAIG,IAAI,CAAC,YAAY;mBAChB,CAAC,CAAgB,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;;;;;;UAMC,IAAI,CAAC,KAAK;YACV,CAAC,CAAC,IAAI,CAAA,sBAAsB,IAAI,CAAC,KAAK,QAAQ;YAC9C,CAAC,CAAC,IAAI,CAAA,wEAAwE;;yCAE/C,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;;;;;;KAM9E,CAAC;IACJ,CAAC;CACF,CAAA;AA1I6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sDAAc;AAExC;IAAhB,KAAK,EAAE;uDAAoB;AAEI;IAA/B,KAAK,CAAC,uBAAuB,CAAC;2DAA8B;AALlD,wBAAwB;IADpC,aAAa,CAAC,6BAA6B,CAAC;GAChC,wBAAwB,CA2IpC","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\n\n/**\n * Floating bookmark-insert panel: name an in-text anchor. Emits\n * `wysiwyg-bookmark-apply` detail: { id } and `wysiwyg-bookmark-cancel`.\n */\n@customElement('nile-wysiwyg-bookmark-panel')\nexport class NileWysiwygBookmarkPanel extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @state() private error = '';\n\n @query('.bookmark-panel__name') nameInput?: HTMLInputElement;\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 20;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .bookmark-panel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 280px;\n padding: 12px;\n background: var(--nile-wysiwyg-popover-bg, #ffffff);\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: var(--nile-wysiwyg-radius, 8px);\n box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));\n font-size: 13px;\n }\n\n label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n input {\n font: inherit;\n padding: 6px 8px;\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 6px;\n outline: none;\n }\n\n input:focus {\n border-color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));\n }\n\n .hint {\n font-size: 12px;\n color: var(--nile-colors-neutral-500, #98a2b3);\n }\n\n .error {\n font-size: 12px;\n color: var(--nile-colors-error-600, #d92d20);\n }\n\n .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n button {\n font: inherit;\n padding: 6px 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 ];\n }\n\n public focusInput(): void {\n this.error = '';\n this.updateComplete.then(() => {\n if (this.nameInput) this.nameInput.value = '';\n this.nameInput?.focus();\n });\n }\n\n private handleSubmit(event: Event): void {\n event.preventDefault();\n // Anchor ids can't contain whitespace; collapse runs to a single dash.\n const id = (this.nameInput?.value ?? '').trim().replace(/\\s+/g, '-');\n if (!id) {\n this.error = 'Enter a bookmark name.';\n return;\n }\n this.error = '';\n this.emit('wysiwyg-bookmark-apply', { id });\n }\n\n public render(): TemplateResult {\n return html`\n <form\n class=\"bookmark-panel\"\n part=\"bookmark-panel\"\n @submit=${this.handleSubmit}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n this.emit('wysiwyg-bookmark-cancel');\n }\n }}\n >\n <label>\n Bookmark name\n <input class=\"bookmark-panel__name\" type=\"text\" placeholder=\"section-intro\" />\n </label>\n ${this.error\n ? html`<div class=\"error\">${this.error}</div>`\n : html`<div class=\"hint\">An invisible anchor you can link to with #name</div>`}\n <div class=\"actions\">\n <button type=\"button\" @click=${() => this.emit('wysiwyg-bookmark-cancel')}>\n Cancel\n </button>\n <button type=\"submit\" class=\"primary\">Insert</button>\n </div>\n </form>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-bookmark-panel': NileWysiwygBookmarkPanel;\n }\n}\n"]}
1
+ {"version":3,"file":"bookmark-panel.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/bookmark-panel.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,WAAW,MAAM,6BAA6B,CAAC;AAEtD;;;GAGG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,WAAW;IAAlD;;QACuC,SAAI,GAAG,KAAK,CAAC;QAExC,UAAK,GAAG,EAAE,CAAC;IAwI9B,CAAC;IApIQ,MAAM,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6EF;SACF,CAAC;IACJ,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,uEAAuE;QACvE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAA;;;;kBAIG,IAAI,CAAC,YAAY;mBAChB,CAAC,CAAgB,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;;;;;;UAMC,IAAI,CAAC,KAAK;YACV,CAAC,CAAC,IAAI,CAAA,sBAAsB,IAAI,CAAC,KAAK,QAAQ;YAC9C,CAAC,CAAC,IAAI,CAAA,wEAAwE;;yCAE/C,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;;;;;;KAM9E,CAAC;IACJ,CAAC;CACF,CAAA;AA1I6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sDAAc;AAExC;IAAhB,KAAK,EAAE;uDAAoB;AAEI;IAA/B,KAAK,CAAC,uBAAuB,CAAC;2DAA8B;AALlD,wBAAwB;IADpC,aAAa,CAAC,6BAA6B,CAAC;GAChC,wBAAwB,CA2IpC","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\n\n/**\n * Floating bookmark-insert panel: name an in-text anchor. Emits\n * `wysiwyg-bookmark-apply` detail: { id } and `wysiwyg-bookmark-cancel`.\n */\n@customElement('nile-wysiwyg-bookmark-panel')\nexport class NileWysiwygBookmarkPanel extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @state() private error = '';\n\n @query('.bookmark-panel__name') nameInput?: HTMLInputElement;\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 20;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .bookmark-panel {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 280px;\n padding: 12px;\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: var(--nile-wysiwyg-radius, 8px);\n box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));\n font-size: 13px;\n }\n\n label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n input {\n font: inherit;\n padding: 6px 8px;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));\n border-radius: 6px;\n outline: none;\n }\n\n input:focus {\n border-color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));\n }\n\n .hint {\n font-size: 12px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));\n }\n\n .error {\n font-size: 12px;\n color: var(--nile-colors-error-600, var(--ng-componentcolors-utility-error-600));\n }\n\n .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n button {\n font: inherit;\n padding: 6px 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 ];\n }\n\n public focusInput(): void {\n this.error = '';\n this.updateComplete.then(() => {\n if (this.nameInput) this.nameInput.value = '';\n this.nameInput?.focus();\n });\n }\n\n private handleSubmit(event: Event): void {\n event.preventDefault();\n // Anchor ids can't contain whitespace; collapse runs to a single dash.\n const id = (this.nameInput?.value ?? '').trim().replace(/\\s+/g, '-');\n if (!id) {\n this.error = 'Enter a bookmark name.';\n return;\n }\n this.error = '';\n this.emit('wysiwyg-bookmark-apply', { id });\n }\n\n public render(): TemplateResult {\n return html`\n <form\n class=\"bookmark-panel\"\n part=\"bookmark-panel\"\n @submit=${this.handleSubmit}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n this.emit('wysiwyg-bookmark-cancel');\n }\n }}\n >\n <label>\n Bookmark name\n <input class=\"bookmark-panel__name\" type=\"text\" placeholder=\"section-intro\" />\n </label>\n ${this.error\n ? html`<div class=\"error\">${this.error}</div>`\n : html`<div class=\"hint\">An invisible anchor you can link to with #name</div>`}\n <div class=\"actions\">\n <button type=\"button\" @click=${() => this.emit('wysiwyg-bookmark-cancel')}>\n Cancel\n </button>\n <button type=\"submit\" class=\"primary\">Insert</button>\n </div>\n </form>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-bookmark-panel': NileWysiwygBookmarkPanel;\n }\n}\n"]}
@@ -109,9 +109,9 @@ let NileWysiwygBubbleMenu = class NileWysiwygBubbleMenu extends NileElement {
109
109
  display: flex;
110
110
  gap: 2px;
111
111
  padding: 4px;
112
- background: var(--nile-wysiwyg-popover-bg, #ffffff);
112
+ background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));
113
113
  border: 1px solid
114
- var(--nile-wysiwyg-border-color, var(--nile-colors-neutral-400, #d0d5dd));
114
+ var(--nile-wysiwyg-border-color, var(--nile-colors-neutral-400, var(--ng-colors-border-primary)));
115
115
  border-radius: var(--nile-wysiwyg-radius, 8px);
116
116
  box-shadow: var(
117
117
  --nile-wysiwyg-popover-shadow,
@@ -131,23 +131,23 @@ let NileWysiwygBubbleMenu = class NileWysiwygBubbleMenu extends NileElement {
131
131
  cursor: pointer;
132
132
  font-size: 13px;
133
133
  font-weight: 600;
134
- color: var(--nile-colors-neutral-700, #344054);
134
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
135
135
  }
136
136
 
137
137
  button:hover {
138
- background: var(--nile-colors-neutral-100, #f2f4f7);
138
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
139
139
  }
140
140
 
141
141
  button[data-active] {
142
- background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));
143
- color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8));
142
+ background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50));
143
+ color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700));
144
144
  }
145
145
 
146
146
  .divider {
147
147
  align-self: stretch;
148
148
  width: 1px;
149
149
  margin: 3px 2px;
150
- background: var(--nile-colors-neutral-300, #e4e7ec);
150
+ background: var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));
151
151
  }
152
152
  `,
153
153
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"bubble-menu.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/bubble-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, css, TemplateResult, CSSResultArray, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { renderGlyph } from '../../internal/glyph';\nimport type { ToolbarState } from '../engine/selection-state';\nimport type { WysiwygCommandDetail } from '../types';\nimport type { AuthoredToolbarItem } from '../nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport '../../nile-lite-tooltip/nile-lite-tooltip';\n\n/** A control the bubble menu knows how to render, keyed by its authored name. */\ninterface BubbleDef {\n /** The command dispatched on click. */\n command: WysiwygCommandDetail['name'];\n label: string;\n /** nile-glyph icon name (ng-* names are stroke-drawn). */\n icon: string;\n /** Static attrs sent with the command (e.g. alignment direction). */\n attrs?: WysiwygCommandDetail['attrs'];\n active?: (state: ToolbarState) => boolean;\n}\n\n/**\n * Registry of controls addressable by `<nile-wysiwyg-bubble-item name=\"…\">`.\n * Icons/labels mirror the main toolbar so both surfaces look identical.\n */\nconst BUBBLE_ITEMS: Record<string, BubbleDef> = {\n bold: { command: 'bold', label: 'Bold', icon: 'format_bold', active: s => s.bold },\n italic: { command: 'italic', label: 'Italic', icon: 'format_italic', active: s => s.italic },\n underline: {\n command: 'underline',\n label: 'Underline',\n icon: 'format_underline',\n active: s => s.underline,\n },\n strike: {\n command: 'strike',\n label: 'Strikethrough',\n icon: 'ng-strikethrough',\n active: s => s.strike,\n },\n code: { command: 'code', label: 'Inline code', icon: 'ng-code', active: s => s.code },\n subscript: {\n command: 'subscript',\n label: 'Subscript',\n icon: 'ng-subscript',\n active: s => s.subscript,\n },\n superscript: {\n command: 'superscript',\n label: 'Superscript',\n icon: 'ng-superscript',\n active: s => s.superscript,\n },\n link: { command: 'openLink', label: 'Link', icon: 'link_2', active: s => s.linkActive },\n bulletList: {\n command: 'bulletList',\n label: 'Bulleted list',\n icon: 'format_list_bulleted',\n active: s => s.inBulletList,\n },\n orderedList: {\n command: 'orderedList',\n label: 'Numbered list',\n icon: 'format_list_numbered',\n active: s => s.inOrderedList,\n },\n alignLeft: {\n command: 'align',\n label: 'Align left',\n icon: 'format_align_left',\n attrs: { align: 'left' },\n active: s => s.align === 'left',\n },\n alignCenter: {\n command: 'align',\n label: 'Align center',\n icon: 'format_align_middle',\n attrs: { align: 'center' },\n active: s => s.align === 'center',\n },\n alignRight: {\n command: 'align',\n label: 'Align right',\n icon: 'format_align_right',\n attrs: { align: 'right' },\n active: s => s.align === 'right',\n },\n clearFormatting: {\n command: 'clearFormatting',\n label: 'Clear formatting',\n icon: 'format_clear',\n },\n};\n\n/** Built-in default when no `<nile-wysiwyg-bubble-item>` children are authored. */\nconst DEFAULT_BUBBLE = ['bold', 'italic', 'underline', 'strike', 'link'];\n\n/**\n * Balloon toolbar shown over non-empty selections. The host owns positioning\n * (absolute left/top) and visibility; commands bubble up as\n * `wysiwyg-command` events, same contract as the main toolbar.\n */\n@customElement('nile-wysiwyg-bubble-menu')\nexport class NileWysiwygBubbleMenu extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ attribute: false }) toolbarState?: ToolbarState;\n\n /**\n * Structured item list authored in light DOM (from\n * `<nile-wysiwyg-bubble-item>` children). `'|'` is a separator. Falls back to\n * {@link DEFAULT_BUBBLE} when empty.\n */\n @property({ attribute: false }) items?: AuthoredToolbarItem[];\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 15;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .bubble {\n display: flex;\n gap: 2px;\n padding: 4px;\n background: var(--nile-wysiwyg-popover-bg, #ffffff);\n border: 1px solid\n var(--nile-wysiwyg-border-color, var(--nile-colors-neutral-400, #d0d5dd));\n border-radius: var(--nile-wysiwyg-radius, 8px);\n box-shadow: var(\n --nile-wysiwyg-popover-shadow,\n 0 4px 12px rgba(16, 24, 40, 0.12)\n );\n }\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 5px;\n background: transparent;\n cursor: pointer;\n font-size: 13px;\n font-weight: 600;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n button:hover {\n background: var(--nile-colors-neutral-100, #f2f4f7);\n }\n\n button[data-active] {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));\n color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8));\n }\n\n .divider {\n align-self: stretch;\n width: 1px;\n margin: 3px 2px;\n background: var(--nile-colors-neutral-300, #e4e7ec);\n }\n `,\n ];\n }\n\n /**\n * True when this instance is an author's declarative `<nile-wysiwyg-bubble-menu>`\n * container in an editor's light DOM (holding `<nile-wysiwyg-bubble-item>`\n * children). It renders nothing — the editor reads the items and renders the\n * real bubble menu in its own shadow DOM. The editor's internal instance\n * lives in a shadow root, so `closest` never matches it.\n */\n private get isAuthoringContainer(): boolean {\n return !!this.closest('nile-wysiwyg-editor');\n }\n\n public render(): TemplateResult {\n if (this.isAuthoringContainer) return html``;\n\n const state = this.toolbarState;\n const entries: AuthoredToolbarItem[] =\n this.items && this.items.length\n ? this.items\n : DEFAULT_BUBBLE.map(name => ({ name }));\n return html`\n <div class=\"bubble\" part=\"bubble-menu\" @mousedown=${(e: Event) => e.preventDefault()}>\n ${entries.map(entry => this.renderEntry(entry, state))}\n </div>\n `;\n }\n\n private renderEntry(\n entry: AuthoredToolbarItem,\n state?: ToolbarState\n ): TemplateResult | typeof nothing {\n if (entry.name === '|') {\n return html`<span class=\"divider\" part=\"bubble-divider\"></span>`;\n }\n const base = BUBBLE_ITEMS[entry.name];\n const label = entry.label || base?.label || entry.name;\n const icon = entry.icon || base?.icon;\n // Unknown command with no icon to draw → nothing to render.\n if (!icon) return nothing;\n const command = base?.command ?? (entry.name as WysiwygCommandDetail['name']);\n const attrs = base?.attrs;\n const isActive = base?.active && state ? base.active(state) : false;\n return html`\n <nile-lite-tooltip content=${label} placement=\"top\">\n <button\n type=\"button\"\n aria-label=${label}\n ?data-active=${isActive}\n @click=${() =>\n this.emit('wysiwyg-command', attrs ? { name: command, attrs } : { name: command })}\n >\n ${renderGlyph(icon, 16)}\n </button>\n </nile-lite-tooltip>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-bubble-menu': NileWysiwygBubbleMenu;\n }\n}\n"]}
1
+ {"version":3,"file":"bubble-menu.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/bubble-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, css, TemplateResult, CSSResultArray, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { renderGlyph } from '../../internal/glyph';\nimport type { ToolbarState } from '../engine/selection-state';\nimport type { WysiwygCommandDetail } from '../types';\nimport type { AuthoredToolbarItem } from '../nile-wysiwyg-toolbar/nile-wysiwyg-toolbar';\nimport '../../nile-lite-tooltip/nile-lite-tooltip';\n\n/** A control the bubble menu knows how to render, keyed by its authored name. */\ninterface BubbleDef {\n /** The command dispatched on click. */\n command: WysiwygCommandDetail['name'];\n label: string;\n /** nile-glyph icon name (ng-* names are stroke-drawn). */\n icon: string;\n /** Static attrs sent with the command (e.g. alignment direction). */\n attrs?: WysiwygCommandDetail['attrs'];\n active?: (state: ToolbarState) => boolean;\n}\n\n/**\n * Registry of controls addressable by `<nile-wysiwyg-bubble-item name=\"…\">`.\n * Icons/labels mirror the main toolbar so both surfaces look identical.\n */\nconst BUBBLE_ITEMS: Record<string, BubbleDef> = {\n bold: { command: 'bold', label: 'Bold', icon: 'format_bold', active: s => s.bold },\n italic: { command: 'italic', label: 'Italic', icon: 'format_italic', active: s => s.italic },\n underline: {\n command: 'underline',\n label: 'Underline',\n icon: 'format_underline',\n active: s => s.underline,\n },\n strike: {\n command: 'strike',\n label: 'Strikethrough',\n icon: 'ng-strikethrough',\n active: s => s.strike,\n },\n code: { command: 'code', label: 'Inline code', icon: 'ng-code', active: s => s.code },\n subscript: {\n command: 'subscript',\n label: 'Subscript',\n icon: 'ng-subscript',\n active: s => s.subscript,\n },\n superscript: {\n command: 'superscript',\n label: 'Superscript',\n icon: 'ng-superscript',\n active: s => s.superscript,\n },\n link: { command: 'openLink', label: 'Link', icon: 'link_2', active: s => s.linkActive },\n bulletList: {\n command: 'bulletList',\n label: 'Bulleted list',\n icon: 'format_list_bulleted',\n active: s => s.inBulletList,\n },\n orderedList: {\n command: 'orderedList',\n label: 'Numbered list',\n icon: 'format_list_numbered',\n active: s => s.inOrderedList,\n },\n alignLeft: {\n command: 'align',\n label: 'Align left',\n icon: 'format_align_left',\n attrs: { align: 'left' },\n active: s => s.align === 'left',\n },\n alignCenter: {\n command: 'align',\n label: 'Align center',\n icon: 'format_align_middle',\n attrs: { align: 'center' },\n active: s => s.align === 'center',\n },\n alignRight: {\n command: 'align',\n label: 'Align right',\n icon: 'format_align_right',\n attrs: { align: 'right' },\n active: s => s.align === 'right',\n },\n clearFormatting: {\n command: 'clearFormatting',\n label: 'Clear formatting',\n icon: 'format_clear',\n },\n};\n\n/** Built-in default when no `<nile-wysiwyg-bubble-item>` children are authored. */\nconst DEFAULT_BUBBLE = ['bold', 'italic', 'underline', 'strike', 'link'];\n\n/**\n * Balloon toolbar shown over non-empty selections. The host owns positioning\n * (absolute left/top) and visibility; commands bubble up as\n * `wysiwyg-command` events, same contract as the main toolbar.\n */\n@customElement('nile-wysiwyg-bubble-menu')\nexport class NileWysiwygBubbleMenu extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ attribute: false }) toolbarState?: ToolbarState;\n\n /**\n * Structured item list authored in light DOM (from\n * `<nile-wysiwyg-bubble-item>` children). `'|'` is a separator. Falls back to\n * {@link DEFAULT_BUBBLE} when empty.\n */\n @property({ attribute: false }) items?: AuthoredToolbarItem[];\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 15;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .bubble {\n display: flex;\n gap: 2px;\n padding: 4px;\n background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));\n border: 1px solid\n var(--nile-wysiwyg-border-color, var(--nile-colors-neutral-400, var(--ng-colors-border-primary)));\n border-radius: var(--nile-wysiwyg-radius, 8px);\n box-shadow: var(\n --nile-wysiwyg-popover-shadow,\n 0 4px 12px rgba(16, 24, 40, 0.12)\n );\n }\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 5px;\n background: transparent;\n cursor: pointer;\n font-size: 13px;\n font-weight: 600;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n button:hover {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n button[data-active] {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50));\n color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700));\n }\n\n .divider {\n align-self: stretch;\n width: 1px;\n margin: 3px 2px;\n background: var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n }\n `,\n ];\n }\n\n /**\n * True when this instance is an author's declarative `<nile-wysiwyg-bubble-menu>`\n * container in an editor's light DOM (holding `<nile-wysiwyg-bubble-item>`\n * children). It renders nothing — the editor reads the items and renders the\n * real bubble menu in its own shadow DOM. The editor's internal instance\n * lives in a shadow root, so `closest` never matches it.\n */\n private get isAuthoringContainer(): boolean {\n return !!this.closest('nile-wysiwyg-editor');\n }\n\n public render(): TemplateResult {\n if (this.isAuthoringContainer) return html``;\n\n const state = this.toolbarState;\n const entries: AuthoredToolbarItem[] =\n this.items && this.items.length\n ? this.items\n : DEFAULT_BUBBLE.map(name => ({ name }));\n return html`\n <div class=\"bubble\" part=\"bubble-menu\" @mousedown=${(e: Event) => e.preventDefault()}>\n ${entries.map(entry => this.renderEntry(entry, state))}\n </div>\n `;\n }\n\n private renderEntry(\n entry: AuthoredToolbarItem,\n state?: ToolbarState\n ): TemplateResult | typeof nothing {\n if (entry.name === '|') {\n return html`<span class=\"divider\" part=\"bubble-divider\"></span>`;\n }\n const base = BUBBLE_ITEMS[entry.name];\n const label = entry.label || base?.label || entry.name;\n const icon = entry.icon || base?.icon;\n // Unknown command with no icon to draw → nothing to render.\n if (!icon) return nothing;\n const command = base?.command ?? (entry.name as WysiwygCommandDetail['name']);\n const attrs = base?.attrs;\n const isActive = base?.active && state ? base.active(state) : false;\n return html`\n <nile-lite-tooltip content=${label} placement=\"top\">\n <button\n type=\"button\"\n aria-label=${label}\n ?data-active=${isActive}\n @click=${() =>\n this.emit('wysiwyg-command', attrs ? { name: command, attrs } : { name: command })}\n >\n ${renderGlyph(icon, 16)}\n </button>\n </nile-lite-tooltip>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-bubble-menu': NileWysiwygBubbleMenu;\n }\n}\n"]}
@@ -36,15 +36,15 @@ let NileWysiwygCodeMenu = class NileWysiwygCodeMenu extends NileElement {
36
36
  align-items: center;
37
37
  gap: 6px;
38
38
  padding: 4px 4px 4px 10px;
39
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
39
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
40
40
  border-radius: 8px;
41
- background: var(--nile-colors-white-base, #ffffff);
41
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
42
42
  box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);
43
43
  }
44
44
 
45
45
  .label {
46
46
  font-size: 12px;
47
- color: var(--nile-colors-neutral-500, #98a2b3);
47
+ color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));
48
48
  white-space: nowrap;
49
49
  }
50
50
 
@@ -56,13 +56,13 @@ let NileWysiwygCodeMenu = class NileWysiwygCodeMenu extends NileElement {
56
56
  border: none;
57
57
  border-radius: 5px;
58
58
  background: transparent;
59
- color: var(--nile-colors-neutral-700, #344054);
59
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
60
60
  cursor: pointer;
61
61
  outline: none;
62
62
  }
63
63
 
64
64
  select:hover {
65
- background: var(--nile-colors-neutral-100, #f2f4f7);
65
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
66
66
  }
67
67
  `,
68
68
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"code-block-menu.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/code-block-menu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE;;;GAGG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,WAAW;IAA7C;;QACuC,SAAI,GAAG,KAAK,CAAC;QAEzD,6DAA6D;QACjC,aAAQ,GAAkB,IAAI,CAAC;IAoF7D,CAAC;IAlFQ,MAAM,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDF;SACF,CAAC;IACJ,CAAC;IAEM,MAAM;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;2DAC4C,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE;;;;;mBAKzE,KAAK;oBACJ,CAAC,CAAQ,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAI,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;;YAEC,cAAc,CAAC,GAAG,CAClB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;8BACM,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,KAAK,KAAK;kBACxD,IAAI,CAAC,KAAK;;aAEf,CACF;;;KAGN,CAAC;IACJ,CAAC;CACF,CAAA;AAvF6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAc;AAG7B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAgC;AAJhD,mBAAmB;IAD/B,aAAa,CAAC,wBAAwB,CAAC;GAC3B,mBAAmB,CAwF/B","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { CODE_LANGUAGES } from '../engine/plugins/code-highlight';\n\n/**\n * Compact floating language picker shown while the cursor is inside a code\n * block. Selection dispatches `wysiwyg-command` with setCodeBlockLanguage.\n */\n@customElement('nile-wysiwyg-code-menu')\nexport class NileWysiwygCodeMenu extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n /** Current language attr ('' = auto, null treated as ''). */\n @property({ type: String }) language: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 15;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .menu {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 4px 4px 10px;\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 8px;\n background: var(--nile-colors-white-base, #ffffff);\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n }\n\n .label {\n font-size: 12px;\n color: var(--nile-colors-neutral-500, #98a2b3);\n white-space: nowrap;\n }\n\n select {\n font: inherit;\n font-size: 12px;\n height: 24px;\n padding: 0 4px;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--nile-colors-neutral-700, #344054);\n cursor: pointer;\n outline: none;\n }\n\n select:hover {\n background: var(--nile-colors-neutral-100, #f2f4f7);\n }\n `,\n ];\n }\n\n public render(): TemplateResult {\n const value = this.language ?? '';\n return html`\n <span class=\"menu\" part=\"code-language\" @mousedown=${(e: Event) => e.stopPropagation()}>\n <span class=\"label\">Language</span>\n <select\n aria-label=\"Code block language\"\n title=\"Syntax highlighting language for this code block\"\n .value=${value}\n @change=${(e: Event) => {\n const language = (e.target as HTMLSelectElement).value;\n this.emit('wysiwyg-command', {\n name: 'setCodeBlockLanguage',\n attrs: { language: language || null },\n });\n }}\n >\n ${CODE_LANGUAGES.map(\n lang => html`\n <option value=${lang.value} ?selected=${lang.value === value}>\n ${lang.label}\n </option>\n `\n )}\n </select>\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-code-menu': NileWysiwygCodeMenu;\n }\n}\n"]}
1
+ {"version":3,"file":"code-block-menu.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/code-block-menu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE;;;GAGG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,WAAW;IAA7C;;QACuC,SAAI,GAAG,KAAK,CAAC;QAEzD,6DAA6D;QACjC,aAAQ,GAAkB,IAAI,CAAC;IAoF7D,CAAC;IAlFQ,MAAM,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDF;SACF,CAAC;IACJ,CAAC;IAEM,MAAM;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;2DAC4C,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE;;;;;mBAKzE,KAAK;oBACJ,CAAC,CAAQ,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAI,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;;YAEC,cAAc,CAAC,GAAG,CAClB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;8BACM,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,KAAK,KAAK;kBACxD,IAAI,CAAC,KAAK;;aAEf,CACF;;;KAGN,CAAC;IACJ,CAAC;CACF,CAAA;AAvF6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAc;AAG7B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAgC;AAJhD,mBAAmB;IAD/B,aAAa,CAAC,wBAAwB,CAAC;GAC3B,mBAAmB,CAwF/B","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { CODE_LANGUAGES } from '../engine/plugins/code-highlight';\n\n/**\n * Compact floating language picker shown while the cursor is inside a code\n * block. Selection dispatches `wysiwyg-command` with setCodeBlockLanguage.\n */\n@customElement('nile-wysiwyg-code-menu')\nexport class NileWysiwygCodeMenu extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n /** Current language attr ('' = auto, null treated as ''). */\n @property({ type: String }) language: string | null = null;\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 15;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .menu {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 4px 4px 10px;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));\n border-radius: 8px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-shadow: 0 4px 12px rgba(16, 24, 40, 0.12);\n }\n\n .label {\n font-size: 12px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));\n white-space: nowrap;\n }\n\n select {\n font: inherit;\n font-size: 12px;\n height: 24px;\n padding: 0 4px;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n cursor: pointer;\n outline: none;\n }\n\n select:hover {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n `,\n ];\n }\n\n public render(): TemplateResult {\n const value = this.language ?? '';\n return html`\n <span class=\"menu\" part=\"code-language\" @mousedown=${(e: Event) => e.stopPropagation()}>\n <span class=\"label\">Language</span>\n <select\n aria-label=\"Code block language\"\n title=\"Syntax highlighting language for this code block\"\n .value=${value}\n @change=${(e: Event) => {\n const language = (e.target as HTMLSelectElement).value;\n this.emit('wysiwyg-command', {\n name: 'setCodeBlockLanguage',\n attrs: { language: language || null },\n });\n }}\n >\n ${CODE_LANGUAGES.map(\n lang => html`\n <option value=${lang.value} ?selected=${lang.value === value}>\n ${lang.label}\n </option>\n `\n )}\n </select>\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-code-menu': NileWysiwygCodeMenu;\n }\n}\n"]}
@@ -58,8 +58,8 @@ let NileWysiwygEmbedMenu = class NileWysiwygEmbedMenu extends NileElement {
58
58
  display: flex;
59
59
  gap: 2px;
60
60
  padding: 4px;
61
- background: var(--nile-wysiwyg-popover-bg, #ffffff);
62
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
61
+ background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));
62
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
63
63
  border-radius: 8px;
64
64
  box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));
65
65
  }
@@ -77,16 +77,16 @@ let NileWysiwygEmbedMenu = class NileWysiwygEmbedMenu extends NileElement {
77
77
  cursor: pointer;
78
78
  font-size: 12px;
79
79
  font-weight: 600;
80
- color: var(--nile-colors-neutral-700, #344054);
80
+ color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));
81
81
  }
82
82
 
83
83
  button:hover {
84
- background: var(--nile-colors-neutral-100, #f2f4f7);
84
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
85
85
  }
86
86
 
87
87
  button[data-active] {
88
- background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));
89
- color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8));
88
+ background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50));
89
+ color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700));
90
90
  }
91
91
  `,
92
92
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"embed-menu.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/embed-menu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAYnD,MAAM,GAAG,GAAc;IACrB;QACE,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACxB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI;KAC9D;IACD;QACE,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC1B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ;KACvC;IACD;QACE,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QACzB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO;KACtC;IACD,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;CACvE,CAAC;AAEF;;;;GAIG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,WAAW;IAA9C;;QACuC,SAAI,GAAG,KAAK,CAAC;IA+E3D,CAAC;IA3EQ,MAAM,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDF;SACF,CAAC;IACJ,CAAC;IAEM,MAAM;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,OAAO,IAAI,CAAA;uDACwC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;UAC7E,GAAG,CAAC,GAAG,CACP,EAAE,CAAC,EAAE,CAAC,IAAI,CAAA;;;sBAGE,EAAE,CAAC,KAAK;2BACH,EAAE,CAAC,KAAK;6BACN,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;uBACnD,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;;gBAEhF,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;;WAEjD,CACF;;KAEJ,CAAC;IACJ,CAAC;CACF,CAAA;AA/E6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;kDAAc;AAEzB;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;0DAA6B;AAHjD,oBAAoB;IADhC,aAAa,CAAC,yBAAyB,CAAC;GAC5B,oBAAoB,CAgFhC","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { renderGlyph } from '../../internal/glyph';\nimport type { ToolbarState } from '../engine/selection-state';\n\ninterface EmbedOp {\n label: string;\n icon?: string;\n text?: string;\n command: string;\n attrs?: Record<string, unknown>;\n active?: (s: ToolbarState) => boolean;\n}\n\nconst OPS: EmbedOp[] = [\n {\n label: 'Align left',\n icon: 'format_align_left',\n command: 'setEmbedAlign',\n attrs: { align: 'left' },\n active: s => s.embedAlign === 'left' || s.embedAlign === null,\n },\n {\n label: 'Align center',\n icon: 'format_align_middle',\n command: 'setEmbedAlign',\n attrs: { align: 'center' },\n active: s => s.embedAlign === 'center',\n },\n {\n label: 'Align right',\n icon: 'format_align_right',\n command: 'setEmbedAlign',\n attrs: { align: 'right' },\n active: s => s.embedAlign === 'right',\n },\n { label: 'Delete video', icon: 'ng-trash-01', command: 'deleteEmbed' },\n];\n\n/**\n * Compact floating bar shown while a video embed is selected — mirrors the\n * image menu (align left/center/right, delete). The host positions it;\n * operations bubble up as `wysiwyg-command` events.\n */\n@customElement('nile-wysiwyg-embed-menu')\nexport class NileWysiwygEmbedMenu extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ attribute: false }) toolbarState?: ToolbarState;\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 15;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .menu {\n display: flex;\n gap: 2px;\n padding: 4px;\n background: var(--nile-wysiwyg-popover-bg, #ffffff);\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 8px;\n box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));\n }\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 26px;\n height: 26px;\n padding: 0 4px;\n border: none;\n border-radius: 5px;\n background: transparent;\n cursor: pointer;\n font-size: 12px;\n font-weight: 600;\n color: var(--nile-colors-neutral-700, #344054);\n }\n\n button:hover {\n background: var(--nile-colors-neutral-100, #f2f4f7);\n }\n\n button[data-active] {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));\n color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8));\n }\n `,\n ];\n }\n\n public render(): TemplateResult {\n const state = this.toolbarState;\n return html`\n <div class=\"menu\" part=\"embed-menu\" @mousedown=${(e: Event) => e.preventDefault()}>\n ${OPS.map(\n op => html`\n <button\n type=\"button\"\n title=${op.label}\n aria-label=${op.label}\n ?data-active=${state && op.active ? op.active(state) : false}\n @click=${() => this.emit('wysiwyg-command', { name: op.command, attrs: op.attrs })}\n >\n ${op.icon ? renderGlyph(op.icon, 16) : op.text}\n </button>\n `\n )}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-embed-menu': NileWysiwygEmbedMenu;\n }\n}\n"]}
1
+ {"version":3,"file":"embed-menu.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/embed-menu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAYnD,MAAM,GAAG,GAAc;IACrB;QACE,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACxB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI;KAC9D;IACD;QACE,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC1B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ;KACvC;IACD;QACE,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QACzB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO;KACtC;IACD,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE;CACvE,CAAC;AAEF;;;;GAIG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,WAAW;IAA9C;;QACuC,SAAI,GAAG,KAAK,CAAC;IA+E3D,CAAC;IA3EQ,MAAM,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDF;SACF,CAAC;IACJ,CAAC;IAEM,MAAM;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,OAAO,IAAI,CAAA;uDACwC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;UAC7E,GAAG,CAAC,GAAG,CACP,EAAE,CAAC,EAAE,CAAC,IAAI,CAAA;;;sBAGE,EAAE,CAAC,KAAK;2BACH,EAAE,CAAC,KAAK;6BACN,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;uBACnD,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;;gBAEhF,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;;WAEjD,CACF;;KAEJ,CAAC;IACJ,CAAC;CACF,CAAA;AA/E6C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;kDAAc;AAEzB;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;0DAA6B;AAHjD,oBAAoB;IADhC,aAAa,CAAC,yBAAyB,CAAC;GAC5B,oBAAoB,CAgFhC","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { renderGlyph } from '../../internal/glyph';\nimport type { ToolbarState } from '../engine/selection-state';\n\ninterface EmbedOp {\n label: string;\n icon?: string;\n text?: string;\n command: string;\n attrs?: Record<string, unknown>;\n active?: (s: ToolbarState) => boolean;\n}\n\nconst OPS: EmbedOp[] = [\n {\n label: 'Align left',\n icon: 'format_align_left',\n command: 'setEmbedAlign',\n attrs: { align: 'left' },\n active: s => s.embedAlign === 'left' || s.embedAlign === null,\n },\n {\n label: 'Align center',\n icon: 'format_align_middle',\n command: 'setEmbedAlign',\n attrs: { align: 'center' },\n active: s => s.embedAlign === 'center',\n },\n {\n label: 'Align right',\n icon: 'format_align_right',\n command: 'setEmbedAlign',\n attrs: { align: 'right' },\n active: s => s.embedAlign === 'right',\n },\n { label: 'Delete video', icon: 'ng-trash-01', command: 'deleteEmbed' },\n];\n\n/**\n * Compact floating bar shown while a video embed is selected — mirrors the\n * image menu (align left/center/right, delete). The host positions it;\n * operations bubble up as `wysiwyg-command` events.\n */\n@customElement('nile-wysiwyg-embed-menu')\nexport class NileWysiwygEmbedMenu extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ attribute: false }) toolbarState?: ToolbarState;\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 15;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .menu {\n display: flex;\n gap: 2px;\n padding: 4px;\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: 8px;\n box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));\n }\n\n button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 26px;\n height: 26px;\n padding: 0 4px;\n border: none;\n border-radius: 5px;\n background: transparent;\n cursor: pointer;\n font-size: 12px;\n font-weight: 600;\n color: var(--nile-colors-neutral-700, var(--ng-colors-text-secondary-700));\n }\n\n button:hover {\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n button[data-active] {\n background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50));\n color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700));\n }\n `,\n ];\n }\n\n public render(): TemplateResult {\n const state = this.toolbarState;\n return html`\n <div class=\"menu\" part=\"embed-menu\" @mousedown=${(e: Event) => e.preventDefault()}>\n ${OPS.map(\n op => html`\n <button\n type=\"button\"\n title=${op.label}\n aria-label=${op.label}\n ?data-active=${state && op.active ? op.active(state) : false}\n @click=${() => this.emit('wysiwyg-command', { name: op.command, attrs: op.attrs })}\n >\n ${op.icon ? renderGlyph(op.icon, 16) : op.text}\n </button>\n `\n )}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-embed-menu': NileWysiwygEmbedMenu;\n }\n}\n"]}
@@ -42,8 +42,8 @@ let NileWysiwygEmbedPanel = class NileWysiwygEmbedPanel extends NileElement {
42
42
  min-width: 340px;
43
43
  max-width: 420px;
44
44
  padding: 12px;
45
- background: var(--nile-wysiwyg-popover-bg, #ffffff);
46
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
45
+ background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));
46
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
47
47
  border-radius: 8px;
48
48
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
49
49
  font-size: 13px;
@@ -55,12 +55,12 @@ let NileWysiwygEmbedPanel = class NileWysiwygEmbedPanel extends NileElement {
55
55
 
56
56
  .hint {
57
57
  font-size: 12px;
58
- color: var(--nile-colors-neutral-500, #98a2b3);
58
+ color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));
59
59
  }
60
60
 
61
61
  .error {
62
62
  font-size: 12px;
63
- color: var(--nile-colors-danger-600, #d92d20);
63
+ color: var(--nile-colors-danger-600, var(--ng-componentcolors-utility-error-600));
64
64
  }
65
65
 
66
66
  .actions {
@@ -1 +1 @@
1
- {"version":3,"file":"embed-panel.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/embed-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { toEmbedUrl } from '../engine/plugins/embeds';\nimport '../../nile-input/index';\nimport '../../nile-button/index';\n\n/**\n * Floating embed-insert panel: paste any https:// link (YouTube/Vimeo/Loom\n * are auto-formatted; anything else embeds as a sandboxed iframe). Styled to\n * match the image panel (nile-input + nile-button). Emits\n * `wysiwyg-embed-apply` detail: { src, provider } and `wysiwyg-embed-cancel`.\n */\n@customElement('nile-wysiwyg-embed-panel')\nexport class NileWysiwygEmbedPanel extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @state() private urlValue = '';\n @state() private error = '';\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 20;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .embed-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 340px;\n max-width: 420px;\n padding: 12px;\n background: var(--nile-wysiwyg-popover-bg, #ffffff);\n border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n font-size: 13px;\n }\n\n nile-input {\n width: 100%;\n }\n\n .hint {\n font-size: 12px;\n color: var(--nile-colors-neutral-500, #98a2b3);\n }\n\n .error {\n font-size: 12px;\n color: var(--nile-colors-danger-600, #d92d20);\n }\n\n .actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n width: 100%;\n }\n `,\n ];\n }\n\n public focusInput(): void {\n this.updateComplete.then(() => {\n const input = this.shadowRoot?.querySelector('nile-input') as HTMLElement | null;\n input?.focus();\n });\n }\n\n /** Clears the field. */\n public reset(): void {\n this.urlValue = '';\n this.error = '';\n }\n\n private onUrl(event: CustomEvent): void {\n this.urlValue = (event.detail?.value ?? '') as string;\n this.error = '';\n }\n\n private handleSubmit(): void {\n const target = toEmbedUrl(this.urlValue.trim());\n if (!target) {\n this.error = 'Enter a valid https:// URL.';\n return;\n }\n this.error = '';\n this.emit('wysiwyg-embed-apply', target);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.stopPropagation();\n this.emit('wysiwyg-embed-cancel');\n } else if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.handleSubmit();\n }\n }\n\n public render(): TemplateResult {\n return html`\n <div class=\"embed-panel\" part=\"embed-panel\" @keydown=${this.handleKeydown}>\n <nile-input\n label=\"Video URL\"\n placeholder=\"https://www.youtube.com/watch?v=…\"\n .value=${this.urlValue}\n @nile-input=${this.onUrl}\n ></nile-input>\n\n ${this.error\n ? html`<span class=\"error\" part=\"error\">${this.error}</span>`\n : html`<span class=\"hint\">Add any link to it</span>`}\n\n <div class=\"actions\">\n <nile-button variant=\"primary\" @click=${() => this.handleSubmit()}\n >Embed</nile-button\n >\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-embed-panel': NileWysiwygEmbedPanel;\n }\n}\n"]}
1
+ {"version":3,"file":"embed-panel.js","sourceRoot":"","sources":["../../../../src/nile-wysiwyg-editor/ui/embed-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, css, TemplateResult, CSSResultArray } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport NileElement from '../../internal/nile-element';\nimport { toEmbedUrl } from '../engine/plugins/embeds';\nimport '../../nile-input/index';\nimport '../../nile-button/index';\n\n/**\n * Floating embed-insert panel: paste any https:// link (YouTube/Vimeo/Loom\n * are auto-formatted; anything else embeds as a sandboxed iframe). Styled to\n * match the image panel (nile-input + nile-button). Emits\n * `wysiwyg-embed-apply` detail: { src, provider } and `wysiwyg-embed-cancel`.\n */\n@customElement('nile-wysiwyg-embed-panel')\nexport class NileWysiwygEmbedPanel extends NileElement {\n @property({ type: Boolean, reflect: true }) open = false;\n\n @state() private urlValue = '';\n @state() private error = '';\n\n public static get styles(): CSSResultArray {\n return [\n css`\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: absolute;\n z-index: 20;\n display: none;\n }\n\n :host([open]) {\n display: block;\n }\n\n .embed-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 340px;\n max-width: 420px;\n padding: 12px;\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: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n font-size: 13px;\n }\n\n nile-input {\n width: 100%;\n }\n\n .hint {\n font-size: 12px;\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));\n }\n\n .error {\n font-size: 12px;\n color: var(--nile-colors-danger-600, var(--ng-componentcolors-utility-error-600));\n }\n\n .actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n width: 100%;\n }\n `,\n ];\n }\n\n public focusInput(): void {\n this.updateComplete.then(() => {\n const input = this.shadowRoot?.querySelector('nile-input') as HTMLElement | null;\n input?.focus();\n });\n }\n\n /** Clears the field. */\n public reset(): void {\n this.urlValue = '';\n this.error = '';\n }\n\n private onUrl(event: CustomEvent): void {\n this.urlValue = (event.detail?.value ?? '') as string;\n this.error = '';\n }\n\n private handleSubmit(): void {\n const target = toEmbedUrl(this.urlValue.trim());\n if (!target) {\n this.error = 'Enter a valid https:// URL.';\n return;\n }\n this.error = '';\n this.emit('wysiwyg-embed-apply', target);\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.stopPropagation();\n this.emit('wysiwyg-embed-cancel');\n } else if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.handleSubmit();\n }\n }\n\n public render(): TemplateResult {\n return html`\n <div class=\"embed-panel\" part=\"embed-panel\" @keydown=${this.handleKeydown}>\n <nile-input\n label=\"Video URL\"\n placeholder=\"https://www.youtube.com/watch?v=…\"\n .value=${this.urlValue}\n @nile-input=${this.onUrl}\n ></nile-input>\n\n ${this.error\n ? html`<span class=\"error\" part=\"error\">${this.error}</span>`\n : html`<span class=\"hint\">Add any link to it</span>`}\n\n <div class=\"actions\">\n <nile-button variant=\"primary\" @click=${() => this.handleSubmit()}\n >Embed</nile-button\n >\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-wysiwyg-embed-panel': NileWysiwygEmbedPanel;\n }\n}\n"]}
@@ -34,8 +34,8 @@ let NileWysiwygEmojiPicker = class NileWysiwygEmojiPicker extends NileElement {
34
34
  .panel {
35
35
  width: 316px;
36
36
  padding: 8px;
37
- background: var(--nile-wysiwyg-popover-bg, #ffffff);
38
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
37
+ background: var(--nile-wysiwyg-popover-bg, var(--ng-colors-bg-primary));
38
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
39
39
  border-radius: 8px;
40
40
  box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));
41
41
  }
@@ -47,13 +47,13 @@ let NileWysiwygEmojiPicker = class NileWysiwygEmojiPicker extends NileElement {
47
47
  box-sizing: border-box;
48
48
  margin-bottom: 6px;
49
49
  padding: 5px 8px;
50
- border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
50
+ border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
51
51
  border-radius: 6px;
52
52
  outline: none;
53
53
  }
54
54
 
55
55
  input:focus {
56
- border-color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600, #2563eb));
56
+ border-color: var(--nile-colors-primary-600, var(--ng-componentcolors-utility-blue-600));
57
57
  }
58
58
 
59
59
  .grid {
@@ -78,13 +78,13 @@ let NileWysiwygEmojiPicker = class NileWysiwygEmojiPicker extends NileElement {
78
78
  }
79
79
 
80
80
  .emoji:hover {
81
- background: var(--nile-colors-neutral-100, #f2f4f7);
81
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
82
82
  }
83
83
 
84
84
  .empty {
85
85
  padding: 12px 4px;
86
86
  font-size: 12px;
87
- color: var(--nile-colors-neutral-500, #98a2b3);
87
+ color: var(--nile-colors-neutral-500, var(--ng-colors-text-quaternary-500));
88
88
  text-align: center;
89
89
  }
90
90
  `,