@ember-eui/core 4.4.0 → 5.0.0-alpha.1

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 (520) hide show
  1. package/addon/components/common.ts +1 -0
  2. package/addon/components/eui-accordion/index.hbs +106 -85
  3. package/addon/components/eui-accordion/index.ts +58 -19
  4. package/addon/components/eui-auto-sizer/index.hbs +3 -0
  5. package/addon/components/eui-auto-sizer/index.ts +175 -0
  6. package/addon/components/eui-avatar/index.hbs +7 -3
  7. package/addon/components/eui-badge/index.hbs +9 -3
  8. package/addon/components/eui-beta-badge/index.hbs +171 -19
  9. package/addon/components/eui-bottom-bar/index.hbs +43 -12
  10. package/addon/components/eui-bottom-bar/index.ts +75 -32
  11. package/addon/components/eui-breadcrumbs/index.hbs +98 -0
  12. package/addon/components/eui-breadcrumbs/index.ts +194 -0
  13. package/addon/components/eui-button/index.hbs +4 -4
  14. package/addon/components/eui-button-content/index.hbs +6 -2
  15. package/addon/components/eui-button-empty/index.hbs +60 -52
  16. package/addon/components/eui-button-icon/index.hbs +17 -3
  17. package/addon/components/eui-call-out/index.hbs +1 -0
  18. package/addon/components/eui-card/index.hbs +61 -47
  19. package/addon/components/eui-card/index.ts +27 -0
  20. package/addon/components/{eui-card/eui-card-select → eui-card-select}/index.hbs +2 -5
  21. package/addon/components/eui-card-select/index.ts +35 -0
  22. package/addon/components/eui-checkable-card/index.hbs +17 -11
  23. package/addon/components/eui-checkbox/index.hbs +11 -5
  24. package/addon/components/eui-checkbox/index.ts +15 -0
  25. package/addon/components/eui-code/index.hbs +14 -8
  26. package/addon/components/eui-code/index.ts +73 -0
  27. package/addon/components/eui-code-block/controls/index.hbs +26 -0
  28. package/addon/components/eui-code-block/full-screen-display/index.hbs +12 -0
  29. package/addon/components/eui-code-block/index.hbs +144 -9
  30. package/addon/components/eui-code-block/index.ts +290 -0
  31. package/addon/components/eui-code-block/virtualized/index.hbs +30 -0
  32. package/addon/components/eui-code-block/virtualized/index.ts +22 -0
  33. package/addon/components/eui-collapsible-nav/index.hbs +35 -44
  34. package/addon/components/eui-collapsible-nav/index.ts +161 -0
  35. package/addon/components/eui-collapsible-nav-group/index.hbs +114 -66
  36. package/addon/components/eui-combo-box/group/index.hbs +3 -3
  37. package/addon/components/eui-combo-box/index.hbs +5 -2
  38. package/addon/components/eui-combo-box/index.ts +89 -4
  39. package/addon/components/eui-combo-box/options/index.hbs +14 -2
  40. package/addon/components/eui-combo-box/options/index.js +22 -9
  41. package/addon/components/eui-combo-box/trigger/index.hbs +3 -1
  42. package/addon/components/eui-confirm-modal/index.hbs +1 -1
  43. package/addon/components/eui-copy/index.hbs +1 -4
  44. package/addon/components/eui-described-form-group/index.hbs +3 -2
  45. package/addon/components/eui-description-list/index.hbs +23 -0
  46. package/addon/components/eui-description-list-description/index.hbs +3 -0
  47. package/addon/components/eui-description-list-title/index.hbs +3 -0
  48. package/addon/components/eui-dual-range/index.hbs +30 -18
  49. package/addon/components/eui-dual-range/index.ts +36 -10
  50. package/addon/components/eui-empty-prompt/index.hbs +77 -0
  51. package/addon/components/eui-field-number/index.hbs +3 -3
  52. package/addon/components/eui-field-search/index.hbs +2 -1
  53. package/addon/components/eui-field-text/index.hbs +3 -1
  54. package/addon/components/eui-file-picker/index.hbs +15 -11
  55. package/addon/components/eui-file-picker/index.ts +26 -8
  56. package/addon/components/eui-flyout/index.hbs +130 -43
  57. package/addon/components/eui-flyout/index.ts +233 -0
  58. package/addon/components/eui-flyout-body/index.hbs +21 -7
  59. package/addon/components/eui-form-label/index.hbs +1 -1
  60. package/addon/components/eui-form-row/index.hbs +13 -9
  61. package/addon/components/eui-header/index.hbs +18 -3
  62. package/addon/{modifiers/fixed-header.ts → components/eui-header/index.ts} +10 -1
  63. package/addon/components/eui-header-alert/index.hbs +25 -0
  64. package/addon/components/eui-header-breadcrumbs/index.hbs +7 -0
  65. package/addon/components/eui-header-links/index.hbs +41 -0
  66. package/addon/components/eui-header-links/index.ts +14 -0
  67. package/addon/components/eui-header-section-item-button/index.hbs +30 -12
  68. package/addon/components/eui-header-section-item-button/index.ts +131 -0
  69. package/addon/components/eui-health/index.hbs +15 -13
  70. package/addon/components/eui-hide-for/index.hbs +3 -0
  71. package/addon/components/eui-hide-for/index.ts +33 -0
  72. package/addon/components/eui-icon/index.hbs +6 -3
  73. package/addon/components/eui-icon/index.ts +4 -0
  74. package/addon/components/eui-image/index.hbs +63 -25
  75. package/addon/components/eui-input-popover/index.ts +6 -4
  76. package/addon/components/eui-key-pad-menu/index.hbs +16 -0
  77. package/addon/components/eui-key-pad-menu/key/index.hbs +1 -0
  78. package/addon/components/eui-key-pad-menu-item/index.hbs +66 -0
  79. package/addon/components/eui-key-pad-menu-item/index.ts +11 -0
  80. package/addon/components/eui-link/index.hbs +50 -0
  81. package/addon/components/eui-list-group-item/index.hbs +10 -2
  82. package/addon/components/eui-markdown-editor/index.hbs +4 -1
  83. package/addon/components/eui-markdown-editor/index.ts +54 -0
  84. package/addon/components/eui-markdown-editor-footer/index.hbs +39 -40
  85. package/addon/components/eui-markdown-format/index.ts +1 -1
  86. package/addon/components/eui-markdown-format/markdown-code/index.hbs +2 -2
  87. package/addon/components/eui-markdown-format/markdown-code-block/index.hbs +1 -0
  88. package/addon/components/eui-modal/index.hbs +28 -24
  89. package/addon/components/eui-overlay-mask/index.hbs +4 -4
  90. package/addon/components/eui-overlay-mask/index.ts +14 -1
  91. package/addon/components/eui-page/index.hbs +3 -6
  92. package/addon/components/eui-page-body/index.hbs +47 -15
  93. package/addon/components/eui-page-content/index.hbs +6 -8
  94. package/addon/components/eui-page-content-body/index.hbs +13 -1
  95. package/addon/components/eui-page-content-header/index.hbs +6 -0
  96. package/addon/components/eui-page-header/index.hbs +31 -6
  97. package/addon/components/eui-page-header-content/index.hbs +219 -0
  98. package/addon/components/eui-page-header-content/index.ts +49 -0
  99. package/addon/components/eui-page-side-bar/index.hbs +8 -1
  100. package/addon/components/eui-page-template/index.hbs +417 -0
  101. package/addon/components/eui-page-template/index.ts +89 -0
  102. package/addon/components/eui-panel/index.hbs +58 -12
  103. package/addon/components/eui-popover/index.hbs +8 -4
  104. package/addon/components/eui-popover/index.ts +28 -12
  105. package/addon/components/eui-progress/index.hbs +16 -13
  106. package/addon/components/eui-radio/index.hbs +9 -3
  107. package/addon/components/eui-range/index.hbs +33 -11
  108. package/addon/components/eui-range/index.ts +7 -4
  109. package/addon/components/eui-range-input/index.hbs +37 -31
  110. package/addon/components/eui-range-input/types.ts +2 -1
  111. package/addon/components/eui-range-levels/index.hbs +3 -3
  112. package/addon/components/eui-range-ticks/index.hbs +2 -2
  113. package/addon/components/eui-range-track/index.hbs +10 -2
  114. package/addon/components/eui-range-track/index.ts +23 -6
  115. package/addon/components/eui-show-for/index.hbs +3 -0
  116. package/addon/components/eui-show-for/index.ts +79 -0
  117. package/addon/components/eui-side-nav/index.hbs +161 -36
  118. package/addon/components/eui-side-nav/index.ts +28 -0
  119. package/addon/components/eui-side-nav-item/button/index.hbs +26 -14
  120. package/addon/components/eui-side-nav-item/index.hbs +52 -25
  121. package/addon/components/eui-split-panel/inner/index.hbs +10 -0
  122. package/addon/components/eui-split-panel/outer/index.hbs +27 -0
  123. package/addon/components/eui-split-panel/outer/index.ts +37 -0
  124. package/addon/components/eui-step/eui-step-number/index.hbs +21 -4
  125. package/addon/components/eui-steps/index.hbs +7 -1
  126. package/addon/components/eui-tab/index.hbs +28 -3
  127. package/addon/{modifiers/focus-tab.ts → components/eui-tab/index.ts} +6 -1
  128. package/addon/components/eui-tabs/index.hbs +6 -1
  129. package/addon/components/eui-tool-tip/index.hbs +6 -7
  130. package/addon/components/eui-tool-tip/index.ts +27 -11
  131. package/addon/helpers/class-names.ts +2 -0
  132. package/addon/helpers/get-range-tick.ts +53 -8
  133. package/addon/helpers/unique-id.ts +4 -1
  134. package/addon/styles/ember-eui.css +2 -10
  135. package/addon/utils/breakpoint.ts +114 -0
  136. package/addon/utils/code/utils.ts +304 -0
  137. package/addon/utils/css-mappings/eui-avatar.ts +51 -9
  138. package/addon/utils/css-mappings/eui-badge.ts +6 -2
  139. package/addon/utils/css-mappings/eui-beta-badge.ts +22 -0
  140. package/addon/utils/css-mappings/eui-bottom-bar.ts +8 -1
  141. package/addon/utils/css-mappings/eui-button-empty.ts +4 -4
  142. package/addon/utils/css-mappings/eui-button-icon.ts +19 -6
  143. package/addon/utils/css-mappings/eui-button.ts +2 -1
  144. package/addon/utils/css-mappings/eui-card-select.ts +1 -11
  145. package/addon/utils/css-mappings/eui-card.ts +1 -18
  146. package/addon/utils/css-mappings/{eui-code-block-impl.ts → eui-code-block.ts} +0 -0
  147. package/addon/utils/css-mappings/eui-description-list.ts +29 -0
  148. package/addon/utils/css-mappings/eui-empty-prompt.ts +17 -0
  149. package/addon/utils/css-mappings/eui-flyout.ts +21 -1
  150. package/addon/utils/css-mappings/eui-header-links.ts +27 -0
  151. package/addon/utils/css-mappings/eui-health.ts +20 -0
  152. package/addon/utils/css-mappings/eui-icon.ts +94 -70
  153. package/addon/utils/css-mappings/eui-image.ts +17 -2
  154. package/addon/utils/css-mappings/eui-link.ts +21 -0
  155. package/addon/utils/css-mappings/eui-page-body.ts +25 -0
  156. package/addon/utils/css-mappings/eui-page-content-body.ts +17 -0
  157. package/addon/utils/css-mappings/eui-page-content.ts +7 -1
  158. package/addon/utils/css-mappings/eui-page-header.ts +17 -0
  159. package/addon/utils/css-mappings/eui-page-side-bar.ts +17 -0
  160. package/addon/utils/css-mappings/eui-panel.ts +1 -0
  161. package/addon/utils/css-mappings/eui-progress-data.ts +0 -1
  162. package/addon/utils/css-mappings/eui-progress.ts +0 -2
  163. package/addon/utils/css-mappings/eui-range-levels.ts +22 -4
  164. package/addon/utils/css-mappings/eui-tabs.ts +3 -1
  165. package/addon/utils/css-mappings/eui-text-color.ts +3 -2
  166. package/addon/utils/css-mappings/index.ts +23 -3
  167. package/addon/utils/detect-element-resize.js +248 -0
  168. package/addon/utils/markdown/plugins/markdown-add-components/index.ts +1 -0
  169. package/addon/utils/markdown/plugins/{markdown-add-components.ts → markdown-add-components/processor.ts} +14 -7
  170. package/addon/utils/markdown/plugins/markdown-checkbox/index.ts +9 -0
  171. package/addon/utils/markdown/plugins/{markdown-checkbox.ts → markdown-checkbox/parser.ts} +3 -5
  172. package/addon/utils/markdown/plugins/markdown-default-plugins/index.ts +12 -0
  173. package/addon/utils/markdown/plugins/{markdown-default-plugins.ts → markdown-default-plugins/parsing-plugins.ts} +13 -25
  174. package/addon/utils/markdown/plugins/markdown-default-plugins/plugins.ts +32 -0
  175. package/addon/utils/markdown/plugins/markdown-default-plugins/processing-plugins.ts +67 -0
  176. package/addon/utils/markdown/plugins/markdown-default-plugins/ui-plugins.ts +27 -0
  177. package/addon/utils/markdown/plugins/markdown-tooltip/index.ts +2 -0
  178. package/addon/utils/markdown/plugins/{markdown-tooltip.ts → markdown-tooltip/parser.ts} +3 -23
  179. package/addon/utils/markdown/plugins/markdown-tooltip/plugin.ts +17 -0
  180. package/addon/utils/markdown/plugins/to-dom.ts +3 -1
  181. package/addon/utils/markdown/remark/remark-prismjs.ts +41 -0
  182. package/addon/utils/popover/index.ts +87 -35
  183. package/addon/utils/range/index.ts +1 -0
  184. package/app/components/eui-auto-sizer/index.js +1 -0
  185. package/app/components/eui-breadcrumbs/index.js +1 -0
  186. package/app/components/eui-card-select/index.js +1 -0
  187. package/app/components/{eui-code-block-impl → eui-code-block/controls}/index.js +1 -1
  188. package/app/components/{eui-code-block-impl/code-block-controls → eui-code-block/full-screen-display}/index.js +1 -1
  189. package/app/components/eui-code-block/virtualized/index.js +1 -0
  190. package/app/components/eui-description-list/index.js +1 -0
  191. package/app/components/eui-description-list-description/index.js +1 -0
  192. package/app/components/eui-description-list-title/index.js +1 -0
  193. package/app/components/eui-empty-prompt/index.js +1 -0
  194. package/app/components/eui-header-alert/index.js +1 -0
  195. package/app/components/eui-header-breadcrumbs/index.js +1 -0
  196. package/app/components/eui-header-links/index.js +1 -0
  197. package/app/components/eui-hide-for/index.js +1 -0
  198. package/app/components/eui-key-pad-menu/index.js +1 -0
  199. package/app/components/eui-key-pad-menu/key/index.js +1 -0
  200. package/app/components/eui-key-pad-menu-item/index.js +1 -0
  201. package/app/components/eui-link/index.js +1 -0
  202. package/app/components/eui-page-header-content/index.js +1 -0
  203. package/app/components/eui-page-template/index.js +1 -0
  204. package/app/components/eui-show-for/index.js +1 -0
  205. package/app/components/eui-split-panel/inner/index.js +1 -0
  206. package/app/components/eui-split-panel/outer/index.js +1 -0
  207. package/app/utils/copy-to-clipboard.js +1 -0
  208. package/docs/display/avatar-demo/demo1.md +43 -49
  209. package/docs/display/avatar-demo/demo2.md +42 -0
  210. package/docs/display/avatar-demo/demo3.md +33 -0
  211. package/docs/display/avatar-demo/demo4.md +53 -0
  212. package/docs/display/avatar-demo/demo5.md +38 -0
  213. package/docs/display/avatar.md +9 -1
  214. package/docs/display/badge-demo/demo1.md +111 -168
  215. package/docs/display/badge-demo/demo2.md +34 -0
  216. package/docs/display/badge-demo/demo3.md +73 -0
  217. package/docs/display/badge-demo/demo4.md +29 -0
  218. package/docs/display/badge-demo/demo5.md +33 -0
  219. package/docs/display/badge-demo/demo6.md +71 -0
  220. package/docs/display/badge-demo/demo7.md +101 -0
  221. package/docs/display/badge-demo/demo8.md +22 -0
  222. package/docs/display/badge.md +9 -1
  223. package/docs/display/callout-demo/demo1.md +29 -81
  224. package/docs/display/callout-demo/demo2.md +28 -0
  225. package/docs/display/callout-demo/demo3.md +29 -0
  226. package/docs/display/callout-demo/demo4.md +26 -0
  227. package/docs/display/callout.md +15 -1
  228. package/docs/display/card/basic-card-demo/demo1.md +22 -316
  229. package/docs/display/card/basic-card.md +9 -1
  230. package/docs/display/card/beta-badge-demo/demo1.md +47 -0
  231. package/docs/display/card/beta-badge.md +9 -0
  232. package/docs/display/card/checkable-demo/demo1.md +20 -94
  233. package/docs/display/card/checkable-demo/demo2.md +63 -0
  234. package/docs/display/card/checkable.md +9 -1
  235. package/docs/display/card/custom-children-demo/demo1.md +93 -0
  236. package/docs/display/card/custom-children.md +9 -0
  237. package/docs/display/card/footer-demo/demo1.md +77 -0
  238. package/docs/display/card/footer.md +9 -0
  239. package/docs/display/card/images-demo/demo1.md +57 -0
  240. package/docs/display/card/images.md +9 -0
  241. package/docs/display/card/layout-demo/demo1.md +40 -0
  242. package/docs/display/card/layout.md +9 -0
  243. package/docs/display/card/selectable-demo/demo1.md +60 -53
  244. package/docs/display/card/selectable.md +9 -1
  245. package/docs/display/comment-list.md +9 -1
  246. package/docs/display/description-list-demo/demo1.md +54 -0
  247. package/docs/display/description-list-demo/demo2.md +43 -0
  248. package/docs/display/description-list-demo/demo3.md +58 -0
  249. package/docs/display/description-list-demo/demo4.md +42 -0
  250. package/docs/display/description-list-demo/demo5.md +62 -0
  251. package/docs/display/description-list-demo/demo6.md +46 -0
  252. package/docs/display/description-list.md +9 -0
  253. package/docs/display/empty-prompt-demo/demo1.md +49 -0
  254. package/docs/display/empty-prompt.md +11 -0
  255. package/docs/display/health-demo/demo1.md +11 -7
  256. package/docs/display/health-demo/demo2.md +31 -0
  257. package/docs/display/health.md +15 -1
  258. package/docs/display/icons-demo/demo1.md +270 -57
  259. package/docs/display/icons-demo/demo2.md +76 -0
  260. package/docs/display/icons-demo/demo3.md +76 -0
  261. package/docs/display/icons-demo/demo4.md +104 -0
  262. package/docs/display/icons-demo/demo5.md +64 -0
  263. package/docs/display/icons-demo/demo6.md +63 -0
  264. package/docs/display/icons-demo/demo7.md +101 -0
  265. package/docs/display/icons-demo/demo8.md +47 -0
  266. package/docs/display/icons.md +9 -1
  267. package/docs/display/image-demo/demo1.md +15 -50
  268. package/docs/display/image-demo/demo2.md +35 -0
  269. package/docs/display/image-demo/demo3.md +75 -0
  270. package/docs/display/image-demo/demo4.md +80 -0
  271. package/docs/display/image.md +13 -1
  272. package/docs/display/list-group.md +9 -1
  273. package/docs/display/progress-demo/demo1.md +10 -5
  274. package/docs/display/progress-demo/demo2.md +11 -26
  275. package/docs/display/progress-demo/demo3.md +27 -0
  276. package/docs/display/progress-demo/demo4.md +77 -0
  277. package/docs/display/progress.md +9 -1
  278. package/docs/display/stat-demo/demo1.md +0 -118
  279. package/docs/display/stat-demo/demo2.md +24 -22
  280. package/docs/display/stat-demo/demo3.md +39 -0
  281. package/docs/display/stat-demo/demo4.md +50 -0
  282. package/docs/display/stat-demo/demo5.md +25 -0
  283. package/docs/display/stat-demo/demo6.md +40 -0
  284. package/docs/display/stat-demo/demo7.md +84 -0
  285. package/docs/display/stat.md +15 -1
  286. package/docs/display/text-demo/demo1.md +79 -130
  287. package/docs/display/text-demo/demo2.md +71 -0
  288. package/docs/display/text-demo/demo3.md +39 -0
  289. package/docs/display/text.md +20 -1
  290. package/docs/display/title-demo/demo1.md +50 -26
  291. package/docs/display/title.md +9 -1
  292. package/docs/display/tool-tip-demo/demo1.md +57 -100
  293. package/docs/display/tool-tip-demo/demo2.md +35 -29
  294. package/docs/display/tool-tip-demo/demo3.md +52 -0
  295. package/docs/display/tool-tip-demo/demo4.md +77 -0
  296. package/docs/display/tool-tip.md +15 -1
  297. package/docs/editors/code/code-block-demo/demo1.md +21 -40
  298. package/docs/editors/code/code-block-demo/demo2.md +35 -0
  299. package/docs/editors/code/code-block-demo/demo3.md +43 -0
  300. package/docs/editors/code/code-block-demo/demo4.md +28 -0
  301. package/docs/editors/code/code-block-demo/demo5.md +42 -0
  302. package/docs/editors/code/code-block-demo/demo6.md +42 -0
  303. package/docs/editors/code/code-block-demo/demo7.md +853 -0
  304. package/docs/editors/code/code-block-demo/demo8.md +855 -0
  305. package/docs/editors/code/code-block.md +27 -1
  306. package/docs/editors/code/inline-demo/demo1.md +6 -3
  307. package/docs/editors/code/inline.md +9 -1
  308. package/docs/editors/markdown-editor/base-editor-demo/demo1.md +9 -28
  309. package/docs/editors/markdown-editor/base-editor.md +9 -1
  310. package/docs/forms/form-controls/checkbox/demo/demo1.md +49 -0
  311. package/docs/forms/form-controls/checkbox/index.md +34 -0
  312. package/docs/forms/form-controls/{checkbox-group-demo → checkbox-group/demo}/demo1.md +4 -13
  313. package/docs/forms/form-controls/checkbox-group/index.md +35 -0
  314. package/docs/forms/form-controls/{combo-box-demo → combo-box/demo}/demo1.md +8 -2
  315. package/docs/forms/form-controls/{combo-box-demo → combo-box/demo}/demo2.md +10 -8
  316. package/docs/forms/form-controls/combo-box/demo/demo3.md +60 -0
  317. package/docs/forms/form-controls/{combo-box-demo/demo3.md → combo-box/demo/demo4.md} +17 -14
  318. package/docs/forms/form-controls/combo-box/demo/demo5.md +151 -0
  319. package/docs/forms/form-controls/combo-box/index.md +14 -0
  320. package/docs/forms/form-controls/file-picker/demo/demo1.md +29 -0
  321. package/docs/forms/form-controls/file-picker/demo/demo2.md +44 -0
  322. package/docs/forms/form-controls/file-picker/demo/demo3.md +45 -0
  323. package/docs/forms/form-controls/file-picker/demo/demo4.md +63 -0
  324. package/docs/forms/form-controls/file-picker/index.md +30 -0
  325. package/docs/forms/form-controls/{form-control-layout-demo → form-control-layout/demo}/demo1.md +0 -0
  326. package/docs/forms/form-controls/form-control-layout/index.md +38 -0
  327. package/docs/forms/form-controls/{form-control-layout-delimited-demo → form-control-layout-delimited/demo}/demo1.md +41 -37
  328. package/docs/forms/form-controls/form-control-layout-delimited/index.md +32 -0
  329. package/docs/forms/form-controls/number-field/demo/demo1.md +20 -0
  330. package/docs/forms/form-controls/{number-field-demo/demo1.md → number-field/demo/demo2.md} +23 -11
  331. package/docs/forms/form-controls/number-field/index.md +20 -0
  332. package/docs/forms/form-controls/password-field/demo/demo1.md +19 -0
  333. package/docs/forms/form-controls/{password-field-demo/demo1.md → password-field/demo/demo2.md} +12 -8
  334. package/docs/forms/form-controls/password-field/index.md +27 -0
  335. package/docs/forms/form-controls/radio/demo/demo1.md +43 -0
  336. package/docs/forms/form-controls/radio/index.md +32 -0
  337. package/docs/forms/form-controls/radio-group/demo/demo1.md +50 -0
  338. package/docs/forms/form-controls/radio-group/index.md +26 -0
  339. package/docs/forms/form-controls/range/demo/demo1.md +96 -0
  340. package/docs/forms/form-controls/range/demo/demo2.md +62 -0
  341. package/docs/forms/form-controls/{range-demo → range/demo}/demo3.md +10 -12
  342. package/docs/forms/form-controls/{range-demo → range/demo}/demo4.md +16 -18
  343. package/docs/forms/form-controls/{range-demo → range/demo}/demo5.md +18 -20
  344. package/docs/forms/form-controls/range/demo/demo6.md +57 -0
  345. package/docs/forms/form-controls/range/demo/demo7.md +350 -0
  346. package/docs/forms/form-controls/range/index.md +26 -0
  347. package/docs/forms/form-controls/search-field/demo/demo1.md +29 -0
  348. package/docs/forms/form-controls/search-field/index.md +22 -0
  349. package/docs/forms/form-controls/select/demo/demo1.md +29 -0
  350. package/docs/forms/form-controls/select/demo/demo2.md +44 -0
  351. package/docs/forms/form-controls/{select-demo/demo1.md → select/demo/demo3.md} +20 -10
  352. package/docs/forms/form-controls/select/index.md +27 -0
  353. package/docs/forms/form-controls/{switch-demo → switch/demo}/demo1.md +10 -10
  354. package/docs/forms/form-controls/switch/index.md +21 -0
  355. package/docs/forms/form-controls/text-field/demo/demo1.md +35 -0
  356. package/docs/forms/form-controls/text-field/demo/demo2.md +40 -0
  357. package/docs/forms/form-controls/{text-field-demo/demo2.md → text-field/demo/demo3.md} +14 -17
  358. package/docs/forms/form-controls/{text-field-demo/demo1.md → text-field/demo/demo4.md} +18 -32
  359. package/docs/forms/form-controls/text-field/index.md +22 -0
  360. package/docs/forms/form-controls/textarea/demo/demo1.md +21 -0
  361. package/docs/forms/form-controls/textarea/demo/demo2.md +24 -0
  362. package/docs/forms/form-controls/textarea/index.md +22 -0
  363. package/docs/forms/form-layouts/described-form-groups-demo/demo1.md +13 -4
  364. package/docs/forms/form-layouts/described-form-groups.md +9 -1
  365. package/docs/layout/accordion-demo/demo1.md +21 -102
  366. package/docs/layout/accordion-demo/demo2.md +76 -0
  367. package/docs/layout/accordion-demo/demo3.md +25 -0
  368. package/docs/layout/accordion-demo/demo4.md +26 -0
  369. package/docs/layout/accordion-demo/demo5.md +65 -0
  370. package/docs/layout/accordion-demo/demo6.md +78 -0
  371. package/docs/layout/accordion-demo/demo7.md +66 -0
  372. package/docs/layout/accordion-demo/demo8.md +64 -0
  373. package/docs/layout/accordion-demo/demo9.md +114 -0
  374. package/docs/layout/accordion.md +40 -1
  375. package/docs/layout/bottom-bar-demo/demo1.md +32 -49
  376. package/docs/layout/bottom-bar-demo/demo2.md +54 -0
  377. package/docs/layout/bottom-bar-demo/demo3.md +81 -0
  378. package/docs/layout/bottom-bar.md +9 -1
  379. package/docs/layout/flex.md +9 -1
  380. package/docs/layout/flyout-demo/demo1.md +19 -11
  381. package/docs/layout/flyout-demo/demo2.md +43 -28
  382. package/docs/layout/flyout-demo/demo3.md +99 -0
  383. package/docs/layout/flyout-demo/demo4.md +115 -0
  384. package/docs/layout/flyout-demo/demo5.md +59 -0
  385. package/docs/layout/flyout-demo/demo6.md +57 -0
  386. package/docs/layout/flyout-demo/demo7.md +51 -0
  387. package/docs/layout/flyout.md +9 -1
  388. package/docs/layout/header-demo/demo1.md +284 -35
  389. package/docs/layout/header-demo/demo2.md +42 -0
  390. package/docs/layout/header-demo/demo3.md +48 -0
  391. package/docs/layout/header-demo/demo4.md +57 -0
  392. package/docs/layout/header-demo/demo5.md +232 -0
  393. package/docs/layout/header-demo/demo6.md +85 -0
  394. package/docs/layout/header-demo/demo7.md +94 -0
  395. package/docs/layout/header.md +9 -1
  396. package/docs/layout/horizontal-rule.md +9 -1
  397. package/docs/layout/modal-demo/demo1.md +64 -167
  398. package/docs/layout/modal-demo/demo2.md +126 -0
  399. package/docs/layout/modal-demo/demo3.md +55 -0
  400. package/docs/layout/modal-demo/demo4.md +65 -0
  401. package/docs/layout/modal-demo/demo5.md +96 -0
  402. package/docs/layout/modal.md +9 -1
  403. package/docs/layout/page-demo/demo1.md +96 -3
  404. package/docs/layout/page-demo/demo10.md +42 -0
  405. package/docs/layout/page-demo/demo2.md +46 -0
  406. package/docs/layout/page-demo/demo3.md +50 -0
  407. package/docs/layout/page-demo/demo4.md +38 -0
  408. package/docs/layout/page-demo/demo5.md +30 -0
  409. package/docs/layout/page-demo/demo6.md +51 -0
  410. package/docs/layout/page-demo/demo7.md +59 -0
  411. package/docs/layout/page-demo/demo8.md +19 -0
  412. package/docs/layout/page-demo/demo9.md +29 -0
  413. package/docs/layout/page.md +9 -1
  414. package/docs/layout/panel-demo/demo1.md +28 -19
  415. package/docs/layout/panel-demo/demo2.md +22 -0
  416. package/docs/layout/panel-demo/demo3.md +27 -0
  417. package/docs/layout/panel-demo/demo4.md +46 -0
  418. package/docs/layout/panel-demo/demo5.md +81 -0
  419. package/docs/layout/panel.md +15 -1
  420. package/docs/layout/popover-demo/demo1.md +42 -300
  421. package/docs/layout/popover-demo/demo10.md +72 -0
  422. package/docs/layout/popover-demo/demo2.md +306 -96
  423. package/docs/layout/popover-demo/demo3.md +20 -12
  424. package/docs/layout/popover-demo/demo4.md +118 -0
  425. package/docs/layout/popover-demo/demo5.md +252 -0
  426. package/docs/layout/popover-demo/demo6.md +44 -0
  427. package/docs/layout/popover-demo/demo7.md +44 -0
  428. package/docs/layout/popover-demo/demo8.md +50 -0
  429. package/docs/layout/popover-demo/demo9.md +80 -0
  430. package/docs/layout/popover.md +9 -1
  431. package/docs/navigation/breadcrumbs-demo/demo1.md +77 -0
  432. package/docs/navigation/breadcrumbs-demo/demo2.md +61 -0
  433. package/docs/navigation/breadcrumbs-demo/demo3.md +61 -0
  434. package/docs/navigation/breadcrumbs-demo/demo4.md +61 -0
  435. package/docs/navigation/breadcrumbs-demo/demo5.md +61 -0
  436. package/docs/navigation/breadcrumbs-demo/demo6.md +61 -0
  437. package/docs/navigation/breadcrumbs.md +9 -0
  438. package/docs/navigation/button-demo/demo1.md +210 -158
  439. package/docs/navigation/button.md +9 -1
  440. package/docs/navigation/collapsible-nav-demo/demo1.md +21 -44
  441. package/docs/navigation/collapsible-nav-demo/demo2.md +108 -0
  442. package/docs/navigation/collapsible-nav.md +9 -1
  443. package/docs/navigation/key-pad-menu-demo/demo1.md +77 -0
  444. package/docs/navigation/key-pad-menu-demo/demo2.md +102 -0
  445. package/docs/navigation/key-pad-menu-demo/demo3.md +54 -0
  446. package/docs/navigation/key-pad-menu-demo/demo4.md +71 -0
  447. package/docs/navigation/key-pad-menu-demo/demo5.md +65 -0
  448. package/docs/navigation/key-pad-menu.md +9 -0
  449. package/docs/navigation/link-demo/demo1.md +44 -0
  450. package/docs/navigation/link-demo/demo2.md +41 -0
  451. package/docs/navigation/link-demo/demo3.md +45 -0
  452. package/docs/navigation/link-demo/demo4.md +61 -0
  453. package/docs/navigation/link.md +9 -0
  454. package/docs/navigation/side-nav-demo/demo1.md +34 -18
  455. package/docs/navigation/side-nav.md +9 -1
  456. package/docs/navigation/steps-demo/demo1.md +16 -18
  457. package/docs/navigation/steps-demo/demo2.md +18 -21
  458. package/docs/navigation/steps-demo/demo3.md +12 -10
  459. package/docs/navigation/steps-demo/demo4.md +84 -0
  460. package/docs/navigation/steps-demo/demo5.md +29 -0
  461. package/docs/navigation/steps.md +9 -1
  462. package/docs/navigation/tabs.md +9 -1
  463. package/docs/utilities/auto-sizer-demo/demo1.md +34 -0
  464. package/docs/utilities/auto-sizer.md +9 -0
  465. package/docs/utilities/copy-demo/demo1.md +37 -0
  466. package/docs/utilities/copy-demo/demo2.md +70 -0
  467. package/docs/utilities/copy.md +9 -0
  468. package/docs/utilities/mutation-observer.md +9 -1
  469. package/docs/utilities/outside-click-detector.md +9 -1
  470. package/docs/utilities/overlay-mask.md +9 -1
  471. package/docs/utilities/portal.md +9 -1
  472. package/docs/utilities/resize-observer.md +9 -1
  473. package/docs/utilities/responsive-demo/demo1.md +108 -0
  474. package/docs/utilities/responsive.md +9 -0
  475. package/index.js +4 -2
  476. package/package.json +13 -7
  477. package/CHANGELOG.md +0 -1345
  478. package/addon/components/eui-code-block-impl/code-block-controls/index.hbs +0 -33
  479. package/addon/components/eui-code-block-impl/index.hbs +0 -111
  480. package/addon/components/eui-code-block-impl/index.ts +0 -121
  481. package/addon/components/eui-flyout-body/banner/index.hbs +0 -3
  482. package/addon/components/eui-flyout-body/content/index.hbs +0 -3
  483. package/addon/helpers/create-event.ts +0 -30
  484. package/addon/modifiers/get-cursor-node.ts +0 -54
  485. package/addon/modifiers/invalidate-indeterminate.ts +0 -10
  486. package/addon/modifiers/on-event-simulate-event.ts +0 -32
  487. package/app/components/eui-card/eui-card-select/index.js +0 -1
  488. package/app/components/eui-flyout-body/banner/index.js +0 -1
  489. package/app/components/eui-flyout-body/content/index.js +0 -1
  490. package/app/helpers/create-event.js +0 -1
  491. package/app/modifiers/fixed-header.js +0 -1
  492. package/app/modifiers/focus-tab.js +0 -1
  493. package/app/modifiers/get-cursor-node.js +0 -1
  494. package/app/modifiers/invalidate-indeterminate.js +0 -1
  495. package/app/modifiers/on-event-simulate-event.js +0 -1
  496. package/docs/forms/form-controls/checkbox-demo/demo1.md +0 -40
  497. package/docs/forms/form-controls/checkbox-group.md +0 -1
  498. package/docs/forms/form-controls/checkbox.md +0 -1
  499. package/docs/forms/form-controls/combo-box.md +0 -1
  500. package/docs/forms/form-controls/file-picker-demo/demo1.md +0 -28
  501. package/docs/forms/form-controls/file-picker.md +0 -1
  502. package/docs/forms/form-controls/form-control-layout-delimited.md +0 -1
  503. package/docs/forms/form-controls/form-control-layout.md +0 -1
  504. package/docs/forms/form-controls/number-field.md +0 -1
  505. package/docs/forms/form-controls/password-field.md +0 -1
  506. package/docs/forms/form-controls/radio-demo/demo1.md +0 -39
  507. package/docs/forms/form-controls/radio-group-demo/demo1.md +0 -60
  508. package/docs/forms/form-controls/radio-group.md +0 -1
  509. package/docs/forms/form-controls/radio.md +0 -1
  510. package/docs/forms/form-controls/range-demo/demo1.md +0 -61
  511. package/docs/forms/form-controls/range-demo/demo2.md +0 -59
  512. package/docs/forms/form-controls/range-demo/demo6.md +0 -59
  513. package/docs/forms/form-controls/range.md +0 -1
  514. package/docs/forms/form-controls/search-field-demo/demo1.md +0 -31
  515. package/docs/forms/form-controls/search-field.md +0 -1
  516. package/docs/forms/form-controls/select.md +0 -1
  517. package/docs/forms/form-controls/switch.md +0 -1
  518. package/docs/forms/form-controls/text-field.md +0 -1
  519. package/docs/forms/form-controls/textarea-demo/demo1.md +0 -36
  520. package/docs/forms/form-controls/textarea.md +0 -1
@@ -0,0 +1,73 @@
1
+ import Component from '@glimmer/component';
2
+ import {
3
+ EuiCodeSharedProps,
4
+ getHtmlContent,
5
+ checkSupportedLanguage
6
+ } from '../../utils/code/utils';
7
+ import { action } from '@ember/object';
8
+ import { highlight, RefractorNode } from 'refractor';
9
+ import { tracked } from '@glimmer/tracking';
10
+ import { scheduleOnce } from '@ember/runloop';
11
+
12
+ type EuiCodeArgs = EuiCodeSharedProps & {
13
+ //comments
14
+ };
15
+
16
+ export default class EuiCodeComponent extends Component<EuiCodeArgs> {
17
+ @tracked codeTarget: undefined | HTMLElement;
18
+ @tracked code: undefined | HTMLElement;
19
+ observer: MutationObserver | null = null;
20
+
21
+ constructor(owner: unknown, args: EuiCodeArgs) {
22
+ super(owner, args);
23
+ this.codeTarget = document.createElement('div');
24
+ this.setupObserver();
25
+ }
26
+
27
+ get language() {
28
+ return checkSupportedLanguage(this.args.language || '');
29
+ }
30
+
31
+ setupObserver() {
32
+ this.observer?.disconnect();
33
+ this.observer = new MutationObserver((mutationsList) => {
34
+ if (mutationsList.length) this.update();
35
+ });
36
+ if (this.codeTarget) {
37
+ this.update();
38
+ this.observer.observe(this.codeTarget, {
39
+ characterData: true,
40
+ subtree: true,
41
+ childList: true
42
+ });
43
+ }
44
+ }
45
+
46
+ @action
47
+ update() {
48
+ const render = () => {
49
+ const html = (
50
+ this.codeTarget?.textContent ? this.codeTarget.textContent : ''
51
+ ).trim();
52
+
53
+ let data: RefractorNode[];
54
+ if (typeof html !== 'string') {
55
+ data = [];
56
+ } else {
57
+ data = highlight(html, this.language);
58
+ }
59
+
60
+ const code = this.code;
61
+
62
+ if (code) {
63
+ code.innerHTML = getHtmlContent(data).element.innerHTML;
64
+ }
65
+ };
66
+ scheduleOnce('afterRender', this, render);
67
+ }
68
+
69
+ willDestroy(): void {
70
+ super.willDestroy();
71
+ this.observer?.disconnect();
72
+ }
73
+ }
@@ -0,0 +1,26 @@
1
+ {{#if (or @showCopyButton @showFullScreenButton)}}
2
+ <div class="euiCodeBlock__controls">
3
+ {{#if @showFullScreenButton}}
4
+ <EuiButtonIcon
5
+ class="euiCodeBlock__fullScreenButton"
6
+ @iconType={{if @isFullScreen "fullScreenExit" "fullScreen"}}
7
+ @color="text"
8
+ aria-label={{if @isFullScreen "Collapse" "Expand"}}
9
+ {{on "click" @toggleFullScreen}}
10
+ />
11
+ {{/if}}
12
+
13
+ {{#if @showCopyButton}}
14
+ <div className="euiCodeBlock__copyButton">
15
+ <EuiCopy @textToCopy={{@textToCopy}} @afterMessage="Copied" as |copy|>
16
+ <EuiButtonIcon
17
+ {{on "click" copy}}
18
+ @iconType="copyClipboard"
19
+ @color="text"
20
+ aria-label="Copy"
21
+ />
22
+ </EuiCopy>
23
+ </div>
24
+ {{/if}}
25
+ </div>
26
+ {{/if}}
@@ -0,0 +1,12 @@
1
+ <EuiOverlayMask>
2
+ <div
3
+ class="euiCodeBlock--fontLarge euiCodeBlock--paddingLarge euiCodeBlock-isFullScreen"
4
+ {{focus-trap
5
+ isActive=true
6
+ focusTrapOptions=(hash clickOutsideDeactivates=true)
7
+ }}
8
+ ...attributes
9
+ >
10
+ {{yield}}
11
+ </div>
12
+ </EuiOverlayMask>
@@ -1,10 +1,145 @@
1
- <EuiCodeBlockImpl
2
- @inline={{false}}
3
- @language={{@language}}
4
- @transparentBackground={{@transparentBackground}}
5
- @isCopyable={{@isCopyable}}
6
- @overflowHeight={{@overflowHeight}}
7
- ...attributes
8
- >
1
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
2
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
3
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
4
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
5
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
6
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
7
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
8
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
9
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
10
+ {{#in-element this.codeTarget}}
9
11
  {{yield}}
10
- </EuiCodeBlockImpl>
12
+ {{/in-element}}
13
+ <EuiInnerText as |setInnerTextRef innerText|>
14
+ {{#let
15
+ (class-names
16
+ "euiCodeBlock"
17
+ (if
18
+ (or this.showCopyButton this.showFullScreenButton)
19
+ "euiCodeBlock--hasControl"
20
+ )
21
+ (if
22
+ (and this.showCopyButton this.showFullScreenButton)
23
+ "euiCodeBlock--hasBothControls"
24
+ )
25
+ (if this.lineNumbersConfig.show "euiCodeBlock--hasLineNumbers")
26
+ )
27
+ (class-names
28
+ "euiCodeBlock__pre"
29
+ (if
30
+ (or (eq this.whiteSpace "pre") this.isVirtualized)
31
+ "euiCodeBlock__pre--whiteSpacePre"
32
+ )
33
+ (if
34
+ (and (eq this.whiteSpace "pre-wrap") (not this.isVirtualized))
35
+ "euiCodeBlock__pre--whiteSpacePreWrap"
36
+ )
37
+ (if this.isVirtualized "euiCodeBlock__pre--isVirtualized")
38
+ )
39
+ (component "eui-code-block/virtualized")
40
+ (component "eui-code-block/controls")
41
+ (component "eui-code-block/full-screen-display")
42
+ as |wrapperClasses preClasses VirtualizedCodeBlock Controls FullScreenDisplay|
43
+ }}
44
+ <div
45
+ class={{class-names
46
+ wrapperClasses
47
+ (if this.transparentBackground "euiCodeBlock--transparentBackground")
48
+ componentName="EuiCodeBlock"
49
+ fontSize=this.fontSize
50
+ paddingSize=this.paddingSize
51
+ }}
52
+ {{style this.optionalStyles}}
53
+ {{this.highlightTargetModifier
54
+ element=this.codeTarget
55
+ language=this.language
56
+ lineNumbersConfig=this.lineNumbersConfig
57
+ onChange=this.updateCode
58
+ codeElement=this.code
59
+ codeFullScreenElement=this.codeFullScreen
60
+ }}
61
+ >
62
+ {{#if this.isVirtualized}}
63
+ {{!virtualized}}
64
+ <VirtualizedCodeBlock
65
+ class={{preClasses}}
66
+ tabindex="0"
67
+ {{on-key "Escape" this.closeFullScreen}}
68
+ @language={{this.language}}
69
+ @data={{this.data.data}}
70
+ @rowHeight={{this.rowHeight}}
71
+ @overflowHeight={{@overflowHeight}}
72
+ />
73
+ {{else}}
74
+ {{!template-lint-disable}}
75
+ <pre
76
+ class={{preClasses}}
77
+ {{style this.optionalStyles}}
78
+ tabindex={{this.tabIndex}}
79
+ {{did-insert (set this "wrapperRef")}}
80
+ {{resize-observer onResize=this.doesOverflow}}
81
+ {{mutation-observer
82
+ onMutation=this.doesOverflow
83
+ observerOptions=(hash subtree=true childList=true)
84
+ }}
85
+ {{did-insert setInnerTextRef}}
86
+ ><code
87
+ class="euiCodeBlock__code"
88
+ data-code-language={{this.language}}
89
+ {{did-insert (set this "code")}}
90
+ ...attributes
91
+ ></code></pre>
92
+
93
+ {{/if}}
94
+
95
+ <Controls
96
+ @isFullScreen={{this.isFullScreen}}
97
+ @showFullScreenButton={{this.showFullScreenButton}}
98
+ @toggleFullScreen={{this.toggleFullScreen}}
99
+ @showCopyButton={{this.showCopyButton}}
100
+ @textToCopy={{this.textToCopyHelper
101
+ isVirtualized=this.isVirtualized
102
+ innerText=(this.cleanTextHelper innerText)
103
+ element=this.data.element
104
+ }}
105
+ />
106
+
107
+ {{#if this.isFullScreen}}
108
+ <FullScreenDisplay class={{wrapperClasses}}>
109
+ {{#if this.isVirtualized}}
110
+ <VirtualizedCodeBlock
111
+ class={{preClasses}}
112
+ tabindex="0"
113
+ {{on-key "Escape" this.closeFullScreen}}
114
+ @language={{this.language}}
115
+ @data={{this.data.data}}
116
+ @rowHeight={{this.fontSizeToRowHeightMap.l}}
117
+ @overflowHeight={{@overflowHeight}}
118
+ />
119
+ {{else}}
120
+ <pre
121
+ class={{preClasses}}
122
+ tabindex="0"
123
+ {{on-key "Escape" this.closeFullScreen}}
124
+ ><code
125
+ class="euiCodeBlock__code"
126
+ data-code-language={{this.language}}
127
+ {{did-insert (set this "codeFullScreen")}}
128
+ ></code></pre>
129
+ {{/if}}
130
+ <Controls
131
+ @isFullScreen={{this.isFullScreen}}
132
+ @showFullScreenButton={{this.showFullScreenButton}}
133
+ @showCopyButton={{this.showCopyButton}}
134
+ @toggleFullScreen={{this.toggleFullScreen}}
135
+ @textToCopy={{this.textToCopyHelper
136
+ isVirtualized=this.isVirtualized
137
+ innerText=(this.cleanTextHelper innerText)
138
+ element=this.data.element
139
+ }}
140
+ />
141
+ </FullScreenDisplay>
142
+ {{/if}}
143
+ </div>
144
+ {{/let}}
145
+ </EuiInnerText>
@@ -0,0 +1,290 @@
1
+ import Component from '@glimmer/component';
2
+ import {
3
+ EuiCodeSharedProps,
4
+ getHtmlContent,
5
+ checkSupportedLanguage,
6
+ highlightByLine
7
+ } from '../../utils/code/utils';
8
+ import { action } from '@ember/object';
9
+ import { RefractorNode } from 'refractor';
10
+ import { tracked } from '@glimmer/tracking';
11
+ import { scheduleOnce } from '@ember/runloop';
12
+ import { modifier } from 'ember-modifier';
13
+ import { helper } from '@ember/component/helper';
14
+
15
+ interface LineNumbersConfig {
16
+ start?: number;
17
+ highlight?: string;
18
+ show?: boolean;
19
+ }
20
+
21
+ type PaddingSize = 'none' | 's' | 'm' | 'l';
22
+ type FontSize = 's' | 'm' | 'l';
23
+
24
+ const fontSizeToRowHeightMap = {
25
+ s: 18,
26
+ m: 21,
27
+ l: 24
28
+ };
29
+
30
+ type EuiCodeBlockArgs = EuiCodeSharedProps & {
31
+ paddingSize?: PaddingSize;
32
+ fontSize?: FontSize;
33
+
34
+ /**
35
+ * Specify how `white-space` inside the element is handled.
36
+ * `pre` respects line breaks/white space but doesn't force them to wrap the line
37
+ * `pre-wrap` respects line breaks/white space but does force them to wrap the line when necessary.
38
+ */
39
+ whiteSpace?: 'pre' | 'pre-wrap';
40
+
41
+ /**
42
+ * Displays an icon button to copy the code snippet to the clipboard.
43
+ */
44
+ isCopyable?: boolean;
45
+
46
+ /**
47
+ * Displays line numbers.
48
+ * Optionally accepts a configuration object for setting the starting number and visual highlighting ranges:
49
+ * `{ start: 100, highlight: '1, 5-10, 20-30, 40' }`
50
+ */
51
+ lineNumbers?: boolean | LineNumbersConfig;
52
+
53
+ /**
54
+ * Sets the maximum container height.
55
+ * Accepts a pixel value (`300`) or a percentage (`'100%'`)
56
+ * Ensure the container has calcuable height when using a percentage
57
+ */
58
+ overflowHeight?: number | string;
59
+
60
+ /**
61
+ * Renders code block lines virtually.
62
+ * Useful for improving load times of large code blocks.
63
+ *
64
+ * When using this configuration, `overflowHeight` is required and
65
+ * `whiteSpace` can only be `pre`.
66
+ */
67
+ isVirtualized?: boolean;
68
+ };
69
+
70
+ interface LineNumbersFinal {
71
+ start: number;
72
+ show: boolean;
73
+ highlight?: string;
74
+ }
75
+
76
+ const highlightModifier = modifier(
77
+ (
78
+ _e,
79
+ _pos: unknown[],
80
+ {
81
+ element: targetEle,
82
+ language = 'text',
83
+ lineNumbersConfig = { start: 1, show: false },
84
+ onChange
85
+ }: {
86
+ element: Element | undefined;
87
+ language: EuiCodeSharedProps['language'];
88
+ lineNumbersConfig: LineNumbersFinal;
89
+ onChange: ({
90
+ data,
91
+ element
92
+ }: {
93
+ data: RefractorNode[];
94
+ element: HTMLElement;
95
+ }) => void;
96
+ }
97
+ ) => {
98
+ let observer: undefined | MutationObserver;
99
+
100
+ const getHighlighedHtml = () => {
101
+ const html = (targetEle?.textContent ? targetEle.textContent : '').trim();
102
+
103
+ let data: RefractorNode[];
104
+ if (typeof html !== 'string') {
105
+ data = [];
106
+ } else {
107
+ data = highlightByLine(html, language, lineNumbersConfig);
108
+ }
109
+
110
+ return {
111
+ data,
112
+ element: getHtmlContent(data).element
113
+ };
114
+ };
115
+
116
+ const setupObserver = () => {
117
+ const newObserver = new MutationObserver((mutationsList) => {
118
+ if (mutationsList.length) {
119
+ onChange(getHighlighedHtml());
120
+ }
121
+ });
122
+ if (targetEle) {
123
+ onChange(getHighlighedHtml());
124
+ newObserver.observe(targetEle, {
125
+ characterData: true,
126
+ subtree: true,
127
+ childList: true
128
+ });
129
+ }
130
+
131
+ return newObserver;
132
+ };
133
+
134
+ if (targetEle) {
135
+ observer = setupObserver();
136
+ }
137
+
138
+ return () => {
139
+ observer?.disconnect();
140
+ };
141
+ }
142
+ );
143
+
144
+ const cleanTextHelper = helper(function ([text]: [string]) {
145
+ return text?.replace(/[\r\n?]{2}|\n\n/g, '\n') || '';
146
+ });
147
+
148
+ const textToCopyHelper = helper(function (
149
+ _pos,
150
+ {
151
+ isVirtualized,
152
+ element,
153
+ innerText
154
+ }: { isVirtualized: boolean; element: HTMLElement; innerText: string }
155
+ ) {
156
+ return isVirtualized ? element.textContent : innerText;
157
+ });
158
+
159
+ export default class EuiCodeBlockComponent extends Component<EuiCodeBlockArgs> {
160
+ highlightTargetModifier = highlightModifier;
161
+ cleanTextHelper = cleanTextHelper;
162
+ textToCopyHelper = textToCopyHelper;
163
+ fontSizeToRowHeightMap = fontSizeToRowHeightMap;
164
+
165
+ //fake element where yield writes to, so we can observe and clone a highlighted version to code and codeFullSceen
166
+ @tracked codeTarget: undefined | HTMLElement;
167
+ //<code> Element for non fullscreen
168
+ @tracked code: undefined | HTMLElement;
169
+ //<code> Element for fullscreen modal
170
+ @tracked codeFullScreen: undefined | HTMLElement;
171
+ @tracked wrapperRef: undefined | HTMLElement;
172
+ @tracked tabIndex = 1;
173
+ @tracked isFullScreen = false;
174
+ @tracked data: undefined | { data: RefractorNode[]; element: HTMLElement };
175
+
176
+ get language() {
177
+ return checkSupportedLanguage(this.args.language || '');
178
+ }
179
+
180
+ get transparentBackground() {
181
+ return this.args.transparentBackground ?? false;
182
+ }
183
+
184
+ get paddingSize() {
185
+ return this.args.paddingSize ?? 'l';
186
+ }
187
+
188
+ get fontSize() {
189
+ return this.args.fontSize ?? 's';
190
+ }
191
+
192
+ get isCopyable() {
193
+ return this.args.isCopyable ?? false;
194
+ }
195
+
196
+ get whiteSpace() {
197
+ return this.args.whiteSpace ?? 'pre-wrap';
198
+ }
199
+
200
+ get isVirtualized() {
201
+ return !!(this.args.isVirtualized && Array.isArray(this.data?.data));
202
+ }
203
+
204
+ get lineNumbers() {
205
+ return this.args.lineNumbers ?? false;
206
+ }
207
+
208
+ get lineNumbersConfig() {
209
+ const { lineNumbers } = this;
210
+ const config = typeof lineNumbers === 'object' ? lineNumbers : {};
211
+ return lineNumbers
212
+ ? { start: 1, show: true, ...config }
213
+ : { start: 1, show: false };
214
+ }
215
+
216
+ get optionalStyles() {
217
+ const overflowHeight = this.args.overflowHeight;
218
+ if (overflowHeight) {
219
+ const property =
220
+ typeof overflowHeight === 'string' ? 'height' : 'maxHeight';
221
+
222
+ return {
223
+ [property]:
224
+ typeof overflowHeight === 'string'
225
+ ? overflowHeight
226
+ : `${overflowHeight}px`
227
+ };
228
+ }
229
+ return {};
230
+ }
231
+
232
+ get showCopyButton() {
233
+ return this.isCopyable && true;
234
+ }
235
+
236
+ get rowHeight() {
237
+ return fontSizeToRowHeightMap[this.fontSize];
238
+ }
239
+
240
+ get showFullScreenButton() {
241
+ return !!this.args.overflowHeight;
242
+ }
243
+
244
+ constructor(owner: unknown, args: EuiCodeBlockArgs) {
245
+ super(owner, args);
246
+ this.codeTarget = document.createElement('div');
247
+ }
248
+
249
+ @action
250
+ toggleFullScreen() {
251
+ this.isFullScreen = !this.isFullScreen;
252
+ }
253
+
254
+ @action
255
+ closeFullScreen(e: KeyboardEvent) {
256
+ e.preventDefault();
257
+ e.stopPropagation();
258
+ this.isFullScreen = false;
259
+ }
260
+
261
+ @action
262
+ doesOverflow() {
263
+ if (!this.wrapperRef) return;
264
+ const { clientWidth, clientHeight, scrollWidth, scrollHeight } =
265
+ this.wrapperRef;
266
+ const doesOverflow =
267
+ scrollHeight > clientHeight || scrollWidth > clientWidth;
268
+
269
+ this.tabIndex = doesOverflow ? 0 : -1;
270
+ }
271
+
272
+ @action
273
+ updateCode(resp: { data: RefractorNode[]; element: HTMLElement }) {
274
+ const render = () => {
275
+ const code = this.code;
276
+ const codeFullScreen = this.codeFullScreen;
277
+
278
+ if (code && !this.isFullScreen) {
279
+ this.data = resp;
280
+ code.innerHTML = resp.element.innerHTML;
281
+ }
282
+
283
+ if (codeFullScreen && this.isFullScreen) {
284
+ this.data = resp;
285
+ codeFullScreen.innerHTML = resp.element.innerHTML;
286
+ }
287
+ };
288
+ scheduleOnce('afterRender', this, render);
289
+ }
290
+ }
@@ -0,0 +1,30 @@
1
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
2
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
3
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
4
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
5
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
6
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
7
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
8
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
9
+ {{!-- DO NOT FORMAT AT ALL, PRE TAGS RESPECT WHITESPACE LITERALLY --}}
10
+ {{#let (unique-id) as |theID|}}
11
+ <EuiAutoSizer as |styles|>
12
+ <pre
13
+ {{style styles}}
14
+ {{!template-lint-disable}}
15
+ style="position: relative; overflow: auto;"
16
+ id={{theID}}
17
+ ...attributes
18
+ ><VerticalCollection
19
+ @items={{@data}}
20
+ @tagName="code"
21
+ class="euiCodeBlock__code"
22
+ data-code-language={{@language}}
23
+ @estimateHeight={{@rowHeight}}
24
+ @bufferSize={{40}}
25
+ @staticHeight={{true}}
26
+ @containerSelector={{concat "#" theID}}
27
+ as |opt index|
28
+ >{{this.getHtmlContent opt index @rowHeight}}</VerticalCollection></pre>
29
+ </EuiAutoSizer>
30
+ {{/let}}
@@ -0,0 +1,22 @@
1
+ import { helper } from '@ember/component/helper';
2
+ import { RefractorNode } from 'refractor';
3
+ import Component from '@glimmer/component';
4
+ import { getHtmlContent } from '../../../utils/code/utils';
5
+
6
+ export default class EuiCodeBlockVirtualizedComponent extends Component {
7
+ getHtmlContent = helper(function ([node, index, rowHeight]: [
8
+ RefractorNode,
9
+ number,
10
+ number
11
+ ]) {
12
+ const content = getHtmlContent([node]);
13
+ const span = content.element.firstChild as HTMLElement;
14
+ if (span) {
15
+ span.style.position = 'absolute';
16
+ span.style.height = `${rowHeight}px`;
17
+ span.style.left = '0';
18
+ span.style.top = `${index * rowHeight}px`;
19
+ }
20
+ return span;
21
+ });
22
+ }
@@ -1,47 +1,38 @@
1
- {{!
2
- Trigger button itself
3
- By using a named block you can place any button as the trigger:
4
- eg. HeaderSectionItem, EuiButton, EuiButtonIcon, or any custom button
5
- }}
6
- {{#if (not (and @navIsDocked (not @showButtonIfDocked)))}}
7
- {{yield to="button"}}
8
- {{/if}}
9
- {{!
10
- The side navigation panel, acts the same way as a flyout
11
- }}
12
- {{#if @isOpen}}
13
- {{#let (unique-id) as |flyoutId|}}
14
- {{#unless @navIsDocked}}
15
- <EuiOverlayMask
16
- @headerZindexLocation="below"
17
- {{on "click" (unless @navIsDocked @onClose (noop))}}
18
- />
19
- {{/unless}}
20
- <nav
21
- id={{flyoutId}}
22
- class={{class-names "euiCollapsibleNav" (if @navIsDocked "euiCollapsibleNav--isDocked")}}
1
+ <span
2
+ {{this.onWindowResize
3
+ isDocked=this.isDocked
4
+ functionToCallOnWindowResize=this.functionToCallOnWindowResize
5
+ }}
6
+ ></span>
7
+ {{#let (arg-or-default @id (unique-id)) as |flyoutID|}}
8
+
9
+ {{#if (not (and this.navIsDocked (not this.showButtonIfDocked)))}}
10
+ {{yield
11
+ (modifier this.triggerHandlers isOpen=@isOpen flyoutID=flyoutID)
12
+ to="button"
13
+ }}
14
+ {{/if}}
15
+
16
+ {{#if (or @isOpen this.navIsDocked)}}
17
+ <EuiFlyout
18
+ id={{flyoutID}}
19
+ class="euiCollapsibleNav"
20
+ @as={{this.as}}
21
+ @size={{this.size}}
22
+ @side={{this.side}}
23
+ @role={{this.role}}
24
+ @ownFocus={{this.ownFocus}}
25
+ @outsideClickCloses={{this.outsideClickCloses}}
26
+ @closeButtonPosition={{this.closeButtonPosition}}
27
+ @paddingSize={{this.paddingSize}}
28
+ @type={{if this.navIsDocked "push" "overlay"}}
29
+ @hideCloseButton={{this.navIsDocked}}
30
+ @pushMinBreakpoint={{this.dockedBreakpoint}}
31
+ @onClose={{@onClose}}
32
+ {{this.windowResize}}
23
33
  ...attributes
24
- {{open-collapsible-nav @navIsDocked}}
25
- {{on-key "Escape" (unless @navIsDocked @onClose)}}
26
- {{focus-trap isActive=(not @navIsDocked) focusTrapOptions=(hash allowOutsideClick=true)}}
27
34
  >
28
35
  {{yield to="content"}}
29
- {{!
30
- Close button is for accessibility purposes only
31
- To close, use ESC key, or click outside the Nav.
32
- Commented for the time being
33
- }}
34
- {{!-- {{#if @showCloseButton}}
35
- <EuiButtonEmpty
36
- @onClick={{unless @navIsDocked @onClose}}
37
- @size="xs"
38
- @textClasses="euiCollapsibleNav__closeButtonText"
39
- @iconType="cross"
40
- class="euiCollapsibleNav__closeButton"
41
- >
42
- {{@closeButtonLabel}}
43
- </EuiButtonEmpty>
44
- {{/if}} --}}
45
- </nav>
46
- {{/let}}
47
- {{/if}}
36
+ </EuiFlyout>
37
+ {{/if}}
38
+ {{/let}}