wj-elements 0.7.6 → 0.8.0

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 (234) hide show
  1. package/dist/animations.js +28 -51
  2. package/dist/animations.js.map +1 -1
  3. package/dist/base-path.js +19 -31
  4. package/dist/base-path.js.map +1 -1
  5. package/dist/custom-elements.json +9053 -9048
  6. package/dist/dark.css +1 -302
  7. package/dist/date.js +16 -36
  8. package/dist/date.js.map +1 -1
  9. package/dist/element-utils.js +20 -81
  10. package/dist/element-utils.js.map +1 -1
  11. package/dist/event.js +49 -165
  12. package/dist/event.js.map +1 -1
  13. package/dist/form-associated-element-BjeJn7j8.js +101 -0
  14. package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
  15. package/dist/icon-DmsqtDpL.js +102 -0
  16. package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
  17. package/dist/light.css +1 -731
  18. package/dist/localize.js +36 -111
  19. package/dist/localize.js.map +1 -1
  20. package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
  21. package/dist/packages/wje-img/img.element.d.ts +4 -4
  22. package/dist/permissions.js +14 -41
  23. package/dist/permissions.js.map +1 -1
  24. package/dist/popup.element-CbkhthPP.js +806 -0
  25. package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
  26. package/dist/router-links-CNsJ-elb.js +105 -0
  27. package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
  28. package/dist/skeleton.css +1 -197
  29. package/dist/styles.css +1 -866
  30. package/dist/universal-service.js +48 -109
  31. package/dist/universal-service.js.map +1 -1
  32. package/dist/utils.js +11 -18
  33. package/dist/utils.js.map +1 -1
  34. package/dist/web-types.json +698 -698
  35. package/dist/wje-accordion-item.js +33 -106
  36. package/dist/wje-accordion-item.js.map +1 -1
  37. package/dist/wje-accordion.js +19 -84
  38. package/dist/wje-accordion.js.map +1 -1
  39. package/dist/wje-animation.js +37 -4258
  40. package/dist/wje-animation.js.map +1 -1
  41. package/dist/wje-aside.js +9 -34
  42. package/dist/wje-aside.js.map +1 -1
  43. package/dist/wje-avatar.js +36 -126
  44. package/dist/wje-avatar.js.map +1 -1
  45. package/dist/wje-badge.js +10 -52
  46. package/dist/wje-badge.js.map +1 -1
  47. package/dist/wje-breadcrumb.js +205 -668
  48. package/dist/wje-breadcrumb.js.map +1 -1
  49. package/dist/wje-breadcrumbs.js +177 -633
  50. package/dist/wje-breadcrumbs.js.map +1 -1
  51. package/dist/wje-button-group.js +48 -153
  52. package/dist/wje-button-group.js.map +1 -1
  53. package/dist/wje-button.js +92 -413
  54. package/dist/wje-button.js.map +1 -1
  55. package/dist/wje-card-content.js +7 -30
  56. package/dist/wje-card-content.js.map +1 -1
  57. package/dist/wje-card-controls.js +7 -30
  58. package/dist/wje-card-controls.js.map +1 -1
  59. package/dist/wje-card-header.js +7 -30
  60. package/dist/wje-card-header.js.map +1 -1
  61. package/dist/wje-card-subtitle.js +7 -34
  62. package/dist/wje-card-subtitle.js.map +1 -1
  63. package/dist/wje-card-title.js +7 -34
  64. package/dist/wje-card-title.js.map +1 -1
  65. package/dist/wje-card.js +15 -71
  66. package/dist/wje-card.js.map +1 -1
  67. package/dist/wje-carousel-item.js +12 -56
  68. package/dist/wje-carousel-item.js.map +1 -1
  69. package/dist/wje-carousel.js +154 -509
  70. package/dist/wje-carousel.js.map +1 -1
  71. package/dist/wje-checkbox.js +50 -227
  72. package/dist/wje-checkbox.js.map +1 -1
  73. package/dist/wje-chip.js +43 -160
  74. package/dist/wje-chip.js.map +1 -1
  75. package/dist/wje-col.js +7 -20
  76. package/dist/wje-col.js.map +1 -1
  77. package/dist/wje-color-picker.js +445 -1464
  78. package/dist/wje-color-picker.js.map +1 -1
  79. package/dist/wje-container.js +9 -35
  80. package/dist/wje-container.js.map +1 -1
  81. package/dist/wje-copy-button.js +64 -204
  82. package/dist/wje-copy-button.js.map +1 -1
  83. package/dist/wje-dialog.js +85 -553
  84. package/dist/wje-dialog.js.map +1 -1
  85. package/dist/wje-divider.js +7 -34
  86. package/dist/wje-divider.js.map +1 -1
  87. package/dist/wje-dropdown.js +78 -305
  88. package/dist/wje-dropdown.js.map +1 -1
  89. package/dist/wje-element.js +191 -700
  90. package/dist/wje-element.js.map +1 -1
  91. package/dist/wje-file-upload-item.js +51 -156
  92. package/dist/wje-file-upload-item.js.map +1 -1
  93. package/dist/wje-file-upload.js +181 -619
  94. package/dist/wje-file-upload.js.map +1 -1
  95. package/dist/wje-footer.js +7 -31
  96. package/dist/wje-footer.js.map +1 -1
  97. package/dist/wje-form.js +7 -32
  98. package/dist/wje-form.js.map +1 -1
  99. package/dist/wje-format-digital.js +26 -118
  100. package/dist/wje-format-digital.js.map +1 -1
  101. package/dist/wje-grid.js +7 -33
  102. package/dist/wje-grid.js.map +1 -1
  103. package/dist/wje-header.js +9 -35
  104. package/dist/wje-header.js.map +1 -1
  105. package/dist/wje-icon-library.js +12 -18
  106. package/dist/wje-icon-library.js.map +1 -1
  107. package/dist/wje-icon-picker.js +65 -320
  108. package/dist/wje-icon-picker.js.map +1 -1
  109. package/dist/wje-icon.js +1 -1
  110. package/dist/wje-img-comparer.js +37 -114
  111. package/dist/wje-img-comparer.js.map +1 -1
  112. package/dist/wje-img.js +50 -197
  113. package/dist/wje-img.js.map +1 -1
  114. package/dist/wje-infinite-scroll.js +94 -346
  115. package/dist/wje-infinite-scroll.js.map +1 -1
  116. package/dist/wje-input-file.js +23 -84
  117. package/dist/wje-input-file.js.map +1 -1
  118. package/dist/wje-input.js +78 -392
  119. package/dist/wje-input.js.map +1 -1
  120. package/dist/wje-item.js +11 -64
  121. package/dist/wje-item.js.map +1 -1
  122. package/dist/wje-kanban.js +124 -401
  123. package/dist/wje-kanban.js.map +1 -1
  124. package/dist/wje-label.js +9 -32
  125. package/dist/wje-label.js.map +1 -1
  126. package/dist/wje-level-indicator.js +38 -157
  127. package/dist/wje-level-indicator.js.map +1 -1
  128. package/dist/wje-list.js +10 -40
  129. package/dist/wje-list.js.map +1 -1
  130. package/dist/wje-main.js +7 -31
  131. package/dist/wje-main.js.map +1 -1
  132. package/dist/wje-masonry.js +66 -211
  133. package/dist/wje-masonry.js.map +1 -1
  134. package/dist/wje-master.js +45 -161
  135. package/dist/wje-master.js.map +1 -1
  136. package/dist/wje-menu-button.js +10 -38
  137. package/dist/wje-menu-button.js.map +1 -1
  138. package/dist/wje-menu-item.js +127 -577
  139. package/dist/wje-menu-item.js.map +1 -1
  140. package/dist/wje-menu-label.js +9 -35
  141. package/dist/wje-menu-label.js.map +1 -1
  142. package/dist/wje-menu.js +14 -49
  143. package/dist/wje-menu.js.map +1 -1
  144. package/dist/wje-option.js +48 -279
  145. package/dist/wje-option.js.map +1 -1
  146. package/dist/wje-options.js +130 -384
  147. package/dist/wje-options.js.map +1 -1
  148. package/dist/wje-orgchart-group.js +16 -52
  149. package/dist/wje-orgchart-group.js.map +1 -1
  150. package/dist/wje-orgchart-item.js +24 -93
  151. package/dist/wje-orgchart-item.js.map +1 -1
  152. package/dist/wje-orgchart.js +18 -68
  153. package/dist/wje-orgchart.js.map +1 -1
  154. package/dist/wje-pagination.js +113 -397
  155. package/dist/wje-pagination.js.map +1 -1
  156. package/dist/wje-popup.js +3 -3
  157. package/dist/wje-popup.js.map +1 -1
  158. package/dist/wje-progress-bar.js +53 -205
  159. package/dist/wje-progress-bar.js.map +1 -1
  160. package/dist/wje-qr-code.js +398 -2980
  161. package/dist/wje-qr-code.js.map +1 -1
  162. package/dist/wje-radio-group.js +52 -190
  163. package/dist/wje-radio-group.js.map +1 -1
  164. package/dist/wje-radio.js +24 -118
  165. package/dist/wje-radio.js.map +1 -1
  166. package/dist/wje-rate.js +62 -266
  167. package/dist/wje-rate.js.map +1 -1
  168. package/dist/wje-relative-time.js +24 -99
  169. package/dist/wje-relative-time.js.map +1 -1
  170. package/dist/wje-reorder-dropzone.js +9 -31
  171. package/dist/wje-reorder-dropzone.js.map +1 -1
  172. package/dist/wje-reorder-handle.js +67 -204
  173. package/dist/wje-reorder-handle.js.map +1 -1
  174. package/dist/wje-reorder-item.js +14 -44
  175. package/dist/wje-reorder-item.js.map +1 -1
  176. package/dist/wje-reorder.js +61 -246
  177. package/dist/wje-reorder.js.map +1 -1
  178. package/dist/wje-route.js +6 -24
  179. package/dist/wje-route.js.map +1 -1
  180. package/dist/wje-router-link.js +11 -39
  181. package/dist/wje-router-link.js.map +1 -1
  182. package/dist/wje-router-outlet.js +76 -172
  183. package/dist/wje-router-outlet.js.map +1 -1
  184. package/dist/wje-routerx.js +537 -1331
  185. package/dist/wje-routerx.js.map +1 -1
  186. package/dist/wje-row.js +9 -31
  187. package/dist/wje-row.js.map +1 -1
  188. package/dist/wje-select.js +326 -1152
  189. package/dist/wje-select.js.map +1 -1
  190. package/dist/wje-slider.js +44 -225
  191. package/dist/wje-slider.js.map +1 -1
  192. package/dist/wje-sliding-container.js +295 -1319
  193. package/dist/wje-sliding-container.js.map +1 -1
  194. package/dist/wje-split-view.js +35 -121
  195. package/dist/wje-split-view.js.map +1 -1
  196. package/dist/wje-status.js +14 -45
  197. package/dist/wje-status.js.map +1 -1
  198. package/dist/wje-step.js +9 -32
  199. package/dist/wje-step.js.map +1 -1
  200. package/dist/wje-stepper.js +109 -357
  201. package/dist/wje-stepper.js.map +1 -1
  202. package/dist/wje-store.js +67 -360
  203. package/dist/wje-store.js.map +1 -1
  204. package/dist/wje-tab-group.js +85 -314
  205. package/dist/wje-tab-group.js.map +1 -1
  206. package/dist/wje-tab-panel.js +7 -28
  207. package/dist/wje-tab-panel.js.map +1 -1
  208. package/dist/wje-tab.js +21 -198
  209. package/dist/wje-tab.js.map +1 -1
  210. package/dist/wje-textarea.js +64 -264
  211. package/dist/wje-textarea.js.map +1 -1
  212. package/dist/wje-thumbnail.js +10 -51
  213. package/dist/wje-thumbnail.js.map +1 -1
  214. package/dist/wje-toast.js +127 -632
  215. package/dist/wje-toast.js.map +1 -1
  216. package/dist/wje-toggle.js +52 -177
  217. package/dist/wje-toggle.js.map +1 -1
  218. package/dist/wje-toolbar-action.js +128 -456
  219. package/dist/wje-toolbar-action.js.map +1 -1
  220. package/dist/wje-toolbar.js +75 -270
  221. package/dist/wje-toolbar.js.map +1 -1
  222. package/dist/wje-tooltip.js +50 -161
  223. package/dist/wje-tooltip.js.map +1 -1
  224. package/dist/wje-tree-item.js +70 -301
  225. package/dist/wje-tree-item.js.map +1 -1
  226. package/dist/wje-tree.js +145 -489
  227. package/dist/wje-tree.js.map +1 -1
  228. package/dist/wje-visually-hidden.js +7 -34
  229. package/dist/wje-visually-hidden.js.map +1 -1
  230. package/package.json +4 -2
  231. package/dist/form-associated-element-DEQ4y-jn.js +0 -245
  232. package/dist/icon-CReYMzAK.js +0 -245
  233. package/dist/popup.element-CwXvVFK7.js +0 -2133
  234. package/dist/router-links-wjqCnncc.js +0 -156
@@ -1 +1 @@
1
- {"version":3,"file":"wje-container.js","sources":["../packages/wje-container/container.element.js","../packages/wje-container/container.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary The Container class is a custom web component that extends WJElement. It is a simple container that can hold other elements or components.\n * It provides a slot for adding child elements or components. The Container class also supports indentation through the `indent` property.\n * The indentation is applied as a CSS variable (`--wje-container-indent`) which can be used in the styles of child elements or components.\n * @documentation https://elements.webjet.sk/components/card-header\n * @status stable\n * @augments WJElement\n * @slot - The slot for adding child elements or components.\n * @cssproperty [--wje-container-indent] - The indentation of the container.\n * @tag wje-container\n */\nexport default class Container extends WJElement {\n /**\n * Container constructor method.\n */\n constructor() {\n super();\n }\n\n /**\n * Class name for the Container.\n * @type {string}\n */\n className = 'Container';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {object} The styles object.\n * @static\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observed attributes.\n * @returns {Array} An empty array.\n * @static\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the Container.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the Container element.\n * @returns {DocumentFragment} The created document fragment.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n if (this.indent) this.style.setProperty('--wje-container-indent', this.indent);\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Container from './container.element.js';\n\n// export * from \"./container.element.js\";\nexport default Container;\n\nWJElement.define('wje-container', Container);\n"],"names":[],"mappings":";;;;;AAce,MAAM,kBAAkB,UAAU;AAAA;AAAA;AAAA;AAAA,EAI7C,cAAc;AACV,UAAK;AAOT;AAAA;AAAA;AAAA;AAAA,qCAAY;AAAA,EANZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,qBAAqB;AAC5B,WAAO,CAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,KAAK,OAAQ,MAAK,MAAM,YAAY,0BAA0B,KAAK,MAAM;AAE7E,QAAI,UAAU,SAAS,cAAc,MAAM;AAE3C,aAAS,YAAY,OAAO;AAE5B,WAAO;AAAA,EACX;AACJ;AC9DA,UAAU,OAAO,iBAAiB,SAAS;"}
1
+ {"version":3,"file":"wje-container.js","sources":["../packages/wje-container/container.element.js","../packages/wje-container/container.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary The Container class is a custom web component that extends WJElement. It is a simple container that can hold other elements or components.\n * It provides a slot for adding child elements or components. The Container class also supports indentation through the `indent` property.\n * The indentation is applied as a CSS variable (`--wje-container-indent`) which can be used in the styles of child elements or components.\n * @documentation https://elements.webjet.sk/components/card-header\n * @status stable\n * @augments WJElement\n * @slot - The slot for adding child elements or components.\n * @cssproperty [--wje-container-indent] - The indentation of the container.\n * @tag wje-container\n */\nexport default class Container extends WJElement {\n /**\n * Container constructor method.\n */\n constructor() {\n super();\n }\n\n /**\n * Class name for the Container.\n * @type {string}\n */\n className = 'Container';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {object} The styles object.\n * @static\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observed attributes.\n * @returns {Array} An empty array.\n * @static\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the Container.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the Container element.\n * @returns {DocumentFragment} The created document fragment.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n if (this.indent) this.style.setProperty('--wje-container-indent', this.indent);\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Container from './container.element.js';\n\n// export * from \"./container.element.js\";\nexport default Container;\n\nWJElement.define('wje-container', Container);\n"],"names":["Container","WJElement","super","className","cssStyleSheet","observedAttributes","setupAttributes","this","isShadowRoot","fragment","document","createDocumentFragment","indent","style","setProperty","element","createElement","appendChild","define"],"mappings":";;;;AAce,MAAMA,UAAkBC,EAAAA;AAAAA,EAInC;AACIC,UAAAA;AAOJC,qCAAY;AAAA,EANZ;AAAA,EAaA,WAAA,gBAAWC;AACP;EACJ;AAAA,EAOA,WAAA,qBAAWC;AACP,WAAO,CAAA;AAAA,EACX;AAAA,EAKA,kBAAAC;AACIC,SAAKC,eAAe;AAAA,EACxB;AAAA,EAMA;AACI,QAAIC,KAAWC,SAASC,uBAAAA;AAEpBJ,SAAKK,UAAQL,KAAKM,MAAMC,YAAY,0BAA0BP,KAAKK,MAAAA;AAEvE,QAAIG,KAAUL,SAASM,cAAc,MAAA;AAIrC,WAFAP,GAASQ,YAAYF,EAAAA,GAEdN;AAAAA,EACX;AAAA;AC7DJR,EAAUiB,OAAO,iBAAiBlB,CAAAA;"}
@@ -1,249 +1,109 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import WJElement from "./wje-element.js";
5
- import Input from "./wje-input.js";
6
- import { WjElementUtils } from "./element-utils.js";
7
- import { event } from "./event.js";
8
- function createNode(text) {
9
- const node = document.createElement("pre");
10
- node.style.width = "1px";
11
- node.style.height = "1px";
12
- node.style.position = "fixed";
13
- node.style.top = "5px";
14
- node.textContent = text;
15
- return node;
4
+ import t from "./wje-element.js";
5
+ import e from "./wje-input.js";
6
+ import { WjElementUtils as i } from "./element-utils.js";
7
+ import { event as o } from "./event.js";
8
+ function n(t2) {
9
+ if ("clipboard" in navigator) return navigator.clipboard.writeText(t2.textContent || "");
10
+ const e2 = getSelection();
11
+ if (null === e2) return Promise.reject(new Error());
12
+ e2.removeAllRanges();
13
+ const i2 = document.createRange();
14
+ return i2.selectNodeContents(t2), e2.addRange(i2), e2.removeAllRanges(), Promise.resolve();
16
15
  }
17
- function copyNode(node) {
18
- if ("clipboard" in navigator) {
19
- return navigator.clipboard.writeText(node.textContent || "");
20
- }
21
- const selection = getSelection();
22
- if (selection === null) {
23
- return Promise.reject(new Error());
24
- }
25
- selection.removeAllRanges();
26
- const range = document.createRange();
27
- range.selectNodeContents(node);
28
- selection.addRange(range);
29
- selection.removeAllRanges();
30
- return Promise.resolve();
31
- }
32
- function copyText(text) {
33
- if ("clipboard" in navigator) {
34
- return navigator.clipboard.writeText(text);
35
- }
36
- const body = document.body;
37
- if (!body) {
38
- return Promise.reject(new Error());
39
- }
40
- const node = createNode(text);
41
- body.appendChild(node);
42
- copyNode(node);
43
- body.removeChild(node);
44
- return Promise.resolve();
16
+ function s(t2) {
17
+ if ("clipboard" in navigator) return navigator.clipboard.writeText(t2);
18
+ const e2 = document.body;
19
+ if (!e2) return Promise.reject(new Error());
20
+ const i2 = (function(t3) {
21
+ const e3 = document.createElement("pre");
22
+ return e3.style.width = "1px", e3.style.height = "1px", e3.style.position = "fixed", e3.style.top = "5px", e3.textContent = t3, e3;
23
+ })(t2);
24
+ return e2.appendChild(i2), n(i2), e2.removeChild(i2), Promise.resolve();
45
25
  }
46
- const styles = "/*\n[ Wj Copy Button ]\n*/\n\n:host {\n cursor: pointer;\n padding: 0.5rem;\n}\n";
47
- class CopyButton extends WJElement {
48
- /**
49
- * Constructor for the CopyButton class.
50
- * Initializes the timeout property.
51
- */
26
+ class r extends t {
52
27
  constructor() {
53
28
  super();
54
29
  __publicField(this, "className", "CopyButton");
55
- /**
56
- * Handles the click event.
57
- * @param {Event} e The event object.
58
- */
59
- __publicField(this, "clicked", (e) => {
60
- const button = e.currentTarget;
61
- if (button instanceof HTMLElement) {
62
- this.copy(button);
63
- }
30
+ __publicField(this, "clicked", (t2) => {
31
+ const e2 = t2.currentTarget;
32
+ e2 instanceof HTMLElement && this.copy(e2);
64
33
  });
65
- /**
66
- * Handles the keydown event.
67
- * @param {Event} e The event object.
68
- */
69
- __publicField(this, "keydown", (e) => {
70
- if (e.key === " " || e.key === "Enter") {
71
- const button = e.currentTarget;
72
- if (button instanceof HTMLElement) {
73
- this.copy(button);
74
- }
34
+ __publicField(this, "keydown", (t2) => {
35
+ if (" " === t2.key || "Enter" === t2.key) {
36
+ const e2 = t2.currentTarget;
37
+ e2 instanceof HTMLElement && this.copy(e2);
75
38
  }
76
39
  });
77
- /**
78
- * Handles the focus event.
79
- * @param {Event} e The event object.
80
- */
81
- __publicField(this, "focused", (e) => {
82
- e.currentTarget.addEventListener("keydown", this.keydown);
40
+ __publicField(this, "focused", (t2) => {
41
+ t2.currentTarget.addEventListener("keydown", this.keydown);
83
42
  });
84
- /**
85
- * Handles the blur event.
86
- * @param {Event} e The event object.
87
- */
88
- __publicField(this, "blurred", (e) => {
89
- e.currentTarget.removeEventListener("keydown", this.keydown);
43
+ __publicField(this, "blurred", (t2) => {
44
+ t2.currentTarget.removeEventListener("keydown", this.keydown);
90
45
  });
91
- /**
92
- * Handles the copied event.
93
- * You can override this method to customize the behavior when the text is copied.
94
- */
95
46
  __publicField(this, "copied", () => {
96
- if (this.hasOwnProperty("icon")) {
97
- this.icon.setAttribute("color", "success");
98
- this.icon.setAttribute("name", "check");
99
- }
100
- if (this._tooltipElement) {
101
- this._tooltipElement.setAttribute("content", this.labelSuccess || "Copied");
102
- }
103
- setTimeout(() => {
104
- if (this.hasOwnProperty("icon")) {
105
- this.icon.removeAttribute("color");
106
- this.icon.setAttribute("name", "clipboard");
107
- }
108
- if (this._tooltipElement) {
109
- this._tooltipElement.setAttribute("content", this.getAttribute("tooltip") || this.label || "Copy");
110
- }
47
+ this.hasOwnProperty("icon") && (this.icon.setAttribute("color", "success"), this.icon.setAttribute("name", "check")), this._tooltipElement && this._tooltipElement.setAttribute("content", this.labelSuccess || "Copied"), setTimeout(() => {
48
+ this.hasOwnProperty("icon") && (this.icon.removeAttribute("color"), this.icon.setAttribute("name", "clipboard")), this._tooltipElement && this._tooltipElement.setAttribute("content", this.getAttribute("tooltip") || this.label || "Copy");
111
49
  }, this.timeout);
112
50
  });
113
51
  this.timeout = 1e3;
114
52
  }
115
- /**
116
- * Setter for the value property.
117
- * @param {string} value The value to be set.
118
- */
119
- set value(value) {
120
- this.setAttribute("value", value);
53
+ set value(t2) {
54
+ this.setAttribute("value", t2);
121
55
  }
122
- /**
123
- * Getter for the value property.
124
- * @returns {string} The value of the value property.
125
- */
126
56
  get value() {
127
57
  return this.getAttribute("value") || "";
128
58
  }
129
- /**
130
- * Getter for the cssStyleSheet property.
131
- * @returns {string} The CSS styles.
132
- */
133
59
  static get cssStyleSheet() {
134
- return styles;
60
+ return ":host{cursor:pointer;padding:.5rem}";
135
61
  }
136
- /**
137
- * Getter for the observedAttributes property.
138
- * @returns {Array} An empty array.
139
- */
140
62
  static get observedAttributes() {
141
63
  return [];
142
64
  }
143
- /**
144
- * Sets up the attributes for the CopyButton.
145
- */
146
65
  setupAttributes() {
147
- this.isShadowRoot = "open";
148
- this.syncAria();
66
+ this.isShadowRoot = "open", this.syncAria();
149
67
  }
150
- /**
151
- * Draws the ColorPicker element.
152
- * @returns {DocumentFragment} The created document fragment.
153
- */
154
68
  draw() {
155
- let fragment = document.createDocumentFragment();
156
- let content;
157
- this._tooltipElement = null;
158
- if (WjElementUtils.hasSlot(this)) {
159
- content = document.createElement("slot");
160
- } else {
161
- let icon = document.createElement("wje-icon");
162
- icon.setAttribute("name", "clipboard");
163
- content = icon;
164
- this.icon = icon;
69
+ let t2, e2 = document.createDocumentFragment();
70
+ if (this._tooltipElement = null, i.hasSlot(this)) t2 = document.createElement("slot");
71
+ else {
72
+ let e3 = document.createElement("wje-icon");
73
+ e3.setAttribute("name", "clipboard"), t2 = e3, this.icon = e3;
165
74
  }
166
75
  if (this.hasAttribute("tooltip")) {
167
- let tooltip = document.createElement("wje-tooltip");
168
- tooltip.setAttribute("offset", "5");
169
- tooltip.setAttribute("content", this.getAttribute("tooltip") || this.label || "Copy");
170
- tooltip.appendChild(content);
171
- fragment.appendChild(tooltip);
172
- this._tooltipElement = tooltip;
173
- } else {
174
- fragment.appendChild(content);
175
- }
176
- return fragment;
76
+ let i2 = document.createElement("wje-tooltip");
77
+ i2.setAttribute("offset", "5"), i2.setAttribute("content", this.getAttribute("tooltip") || this.label || "Copy"), i2.appendChild(t2), e2.appendChild(i2), this._tooltipElement = i2;
78
+ } else e2.appendChild(t2);
79
+ return e2;
177
80
  }
178
- /**
179
- * Adds event listeners for the click, focus, and blur events.
180
- */
181
81
  afterDraw() {
182
- this.syncAria();
183
- event.addListener(this, "click", null, this.clicked);
184
- event.addListener(this, "focus", null, this.focused);
185
- event.addListener(this, "blur", null, this.blurred);
186
- event.addListener(this, "wje-copy-button:click", null, this.copied);
82
+ this.syncAria(), o.addListener(this, "click", null, this.clicked), o.addListener(this, "focus", null, this.focused), o.addListener(this, "blur", null, this.blurred), o.addListener(this, "wje-copy-button:click", null, this.copied);
187
83
  }
188
- /**
189
- * Sync ARIA attributes on host.
190
- */
191
84
  syncAria() {
192
- if (!this.hasAttribute("role")) {
193
- this.setAriaState({ role: "button" });
194
- }
195
- if (!this.hasAttribute("tabindex")) {
196
- this.setAttribute("tabindex", "0");
197
- }
198
- const ariaLabel = this.getAttribute("aria-label");
199
- const label = this.getAttribute("label") || this.label || "Copy";
200
- if (!ariaLabel && label) {
201
- this.setAriaState({ label });
202
- }
203
- if (this.hasAttribute("disabled")) {
204
- this.setAriaState({ disabled: true });
205
- }
85
+ this.hasAttribute("role") || this.setAriaState({ role: "button" }), this.hasAttribute("tabindex") || this.setAttribute("tabindex", "0");
86
+ const t2 = this.getAttribute("aria-label"), e2 = this.getAttribute("label") || this.label || "Copy";
87
+ !t2 && e2 && this.setAriaState({ label: e2 }), this.hasAttribute("disabled") && this.setAriaState({ disabled: true });
206
88
  }
207
- /**
208
- * Copies the specified text or node.
209
- * @param {HTMLElement} button The button element.
210
- */
211
- async copy(button) {
212
- const id = this.getAttribute("for");
213
- const text = this.getAttribute("value");
214
- if (button.getAttribute("aria-disabled") === "true") {
215
- return;
216
- }
217
- if (text) {
218
- await copyText(text);
219
- event.dispatchCustomEvent(this, "wje-copy-button:click");
220
- } else if (id) {
221
- const root = "getRootNode" in Element.prototype ? button.getRootNode() : button.ownerDocument;
222
- if (!(root instanceof Document || "ShadowRoot" in window && root instanceof ShadowRoot)) return;
223
- const node = root.getElementById(id);
224
- if (node) {
225
- await this.copyTarget(node);
226
- event.dispatchCustomEvent(this, "wje-copy-button:click");
89
+ async copy(t2) {
90
+ const e2 = this.getAttribute("for"), i2 = this.getAttribute("value");
91
+ if ("true" !== t2.getAttribute("aria-disabled")) {
92
+ if (i2) await s(i2), o.dispatchCustomEvent(this, "wje-copy-button:click");
93
+ else if (e2) {
94
+ const i3 = "getRootNode" in Element.prototype ? t2.getRootNode() : t2.ownerDocument;
95
+ if (!(i3 instanceof Document || "ShadowRoot" in window && i3 instanceof ShadowRoot)) return;
96
+ const n2 = i3.getElementById(e2);
97
+ n2 && (await this.copyTarget(n2), o.dispatchCustomEvent(this, "wje-copy-button:click"));
227
98
  }
228
99
  }
229
100
  }
230
- /**
231
- * Copies the target content.
232
- * @param {HTMLElement} content The content to be copied.
233
- * @returns {Promise} A promise that resolves when the content is copied.
234
- */
235
- copyTarget(content) {
236
- if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement || content instanceof Input) {
237
- return copyText(content.value);
238
- } else if (content instanceof HTMLAnchorElement && content.hasAttribute("href")) {
239
- return copyText(content.href);
240
- } else {
241
- return copyNode(content);
242
- }
101
+ copyTarget(t2) {
102
+ return t2 instanceof HTMLInputElement || t2 instanceof HTMLTextAreaElement || t2 instanceof e ? s(t2.value) : t2 instanceof HTMLAnchorElement && t2.hasAttribute("href") ? s(t2.href) : n(t2);
243
103
  }
244
104
  }
245
- CopyButton.define("wje-copy-button", CopyButton);
105
+ r.define("wje-copy-button", r);
246
106
  export {
247
- CopyButton as default
107
+ r as default
248
108
  };
249
109
  //# sourceMappingURL=wje-copy-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wje-copy-button.js","sources":["../packages/wje-copy-button/service/service.js","../packages/wje-copy-button/copy-button.element.js","../packages/wje-copy-button/copy-button.js"],"sourcesContent":["/**\n * Create a node with the text content.\n * @param text\n * @returns {Element}\n */\nfunction createNode(text) {\n const node = document.createElement('pre');\n node.style.width = '1px';\n node.style.height = '1px';\n node.style.position = 'fixed';\n node.style.top = '5px';\n node.textContent = text;\n return node;\n}\n\n/**\n * Copy the node to the clipboard.\n * @param node\n * @returns {Promise<never>|Promise<void>}\n */\nexport function copyNode(node) {\n if ('clipboard' in navigator) {\n return navigator.clipboard.writeText(node.textContent || '');\n }\n\n const selection = getSelection(); // Firefox return null\n if (selection === null) {\n return Promise.reject(new Error());\n }\n\n selection.removeAllRanges();\n\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.addRange(range);\n\n // document.execCommand(\"copy\")\n selection.removeAllRanges();\n return Promise.resolve();\n}\n\n/**\n * Copy the text to the clipboard.\n * @param text\n * @returns {Promise<never>|Promise<void>}\n */\nexport function copyText(text) {\n if ('clipboard' in navigator) {\n return navigator.clipboard.writeText(text);\n }\n\n const body = document.body;\n if (!body) {\n return Promise.reject(new Error());\n }\n\n const node = createNode(text);\n body.appendChild(node);\n copyNode(node);\n body.removeChild(node);\n return Promise.resolve();\n}\n","import { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport Input from '../wje-input/input.js';\nimport { copyNode, copyText } from './service/service.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary CopyButton is a custom web component that extends WJElement.\n * It provides a button that, when clicked, copies a specified text to the clipboard.\n * The text to be copied can be specified through the `value` attribute.\n * The CopyButton also supports keyboard interaction, copying the text when the space or enter key is pressed.\n * @documentation https://elements.webjet.sk/components/copy-button\n * @status stable\n * @augments WJElement\n * @attribute {string} for - The id of the element to copy content from.\n * @attribute {string} label - Accessible label for the button. Also used as fallback tooltip text when the `tooltip` attribute is present without a value.\n * @attribute {string} label-success - Text displayed in the tooltip after a successful copy. Used only when the `tooltip` attribute is present.\n * @attribute {string} tooltip - Enables the tooltip. When set to a string, the value is used as the default tooltip content.\n * @attribute {string} value - The text to be copied.\n * @slot - This is a default/unnamed slot.\n * @csspart button - Styles the button element.\n * @cssproperty --text-color - Controls the color of the text.\n * @cssproperty --background-color - Controls the background color of the button.\n * //@fires wje:copy-button - Dispatched when the button is clicked and the text is copied.\n * @tag wje-copy-button\n */\nexport default class CopyButton extends WJElement {\n /**\n * Constructor for the CopyButton class.\n * Initializes the timeout property.\n */\n constructor() {\n super();\n\n this.timeout = 1000;\n }\n\n /**\n * Setter for the value property.\n * @param {string} value The value to be set.\n */\n set value(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * Getter for the value property.\n * @returns {string} The value of the value property.\n */\n get value() {\n return this.getAttribute('value') || '';\n }\n\n className = 'CopyButton';\n\n /**\n * Getter for the cssStyleSheet property.\n * @returns {string} The CSS styles.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observedAttributes property.\n * @returns {Array} An empty array.\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the CopyButton.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the ColorPicker element.\n * @returns {DocumentFragment} The created document fragment.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n let content;\n this._tooltipElement = null;\n\n if (WjElementUtils.hasSlot(this)) {\n content = document.createElement('slot');\n } else {\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', 'clipboard');\n\n content = icon;\n this.icon = icon;\n }\n\n if (this.hasAttribute('tooltip')) {\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('offset', '5');\n tooltip.setAttribute('content', this.getAttribute('tooltip') || this.label || 'Copy');\n\n tooltip.appendChild(content);\n fragment.appendChild(tooltip);\n\n this._tooltipElement = tooltip;\n } else {\n fragment.appendChild(content);\n }\n\n return fragment;\n }\n\n /**\n * Adds event listeners for the click, focus, and blur events.\n */\n afterDraw() {\n this.syncAria();\n event.addListener(this, 'click', null, this.clicked);\n event.addListener(this, 'focus', null, this.focused);\n event.addListener(this, 'blur', null, this.blurred);\n\n event.addListener(this, 'wje-copy-button:click', null, this.copied);\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n if (!this.hasAttribute('role')) {\n this.setAriaState({ role: 'button' });\n }\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n\n const ariaLabel = this.getAttribute('aria-label');\n const label = this.getAttribute('label') || this.label || 'Copy';\n if (!ariaLabel && label) {\n this.setAriaState({ label });\n }\n\n if (this.hasAttribute('disabled')) {\n this.setAriaState({ disabled: true });\n }\n }\n\n /**\n * Handles the click event.\n * @param {Event} e The event object.\n */\n clicked = (e) => {\n const button = e.currentTarget;\n if (button instanceof HTMLElement) {\n this.copy(button);\n }\n };\n\n /**\n * Handles the keydown event.\n * @param {Event} e The event object.\n */\n keydown = (e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n const button = e.currentTarget;\n if (button instanceof HTMLElement) {\n this.copy(button);\n }\n }\n };\n\n /**\n * Handles the focus event.\n * @param {Event} e The event object.\n */\n focused = (e) => {\n e.currentTarget.addEventListener('keydown', this.keydown);\n };\n\n /**\n * Handles the blur event.\n * @param {Event} e The event object.\n */\n blurred = (e) => {\n e.currentTarget.removeEventListener('keydown', this.keydown);\n };\n\n /**\n * Handles the copied event.\n * You can override this method to customize the behavior when the text is copied.\n */\n copied = () => {\n if (this.hasOwnProperty('icon')) {\n this.icon.setAttribute('color', 'success');\n this.icon.setAttribute('name', 'check');\n }\n\n if (this._tooltipElement) {\n this._tooltipElement.setAttribute('content', this.labelSuccess || 'Copied');\n }\n\n setTimeout(() => {\n if (this.hasOwnProperty('icon')) {\n this.icon.removeAttribute('color');\n this.icon.setAttribute('name', 'clipboard');\n }\n\n if (this._tooltipElement) {\n this._tooltipElement.setAttribute('content', this.getAttribute('tooltip') || this.label || 'Copy');\n }\n }, this.timeout);\n };\n\n /**\n * Copies the specified text or node.\n * @param {HTMLElement} button The button element.\n */\n async copy(button) {\n const id = this.getAttribute('for');\n const text = this.getAttribute('value');\n\n if (button.getAttribute('aria-disabled') === 'true') {\n return;\n }\n\n if (text) {\n await copyText(text);\n event.dispatchCustomEvent(this, 'wje-copy-button:click');\n } else if (id) {\n const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;\n if (!(root instanceof Document || ('ShadowRoot' in window && root instanceof ShadowRoot))) return;\n\n const node = root.getElementById(id);\n if (node) {\n await this.copyTarget(node);\n event.dispatchCustomEvent(this, 'wje-copy-button:click');\n }\n }\n }\n\n /**\n * Copies the target content.\n * @param {HTMLElement} content The content to be copied.\n * @returns {Promise} A promise that resolves when the content is copied.\n */\n copyTarget(content) {\n if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement || content instanceof Input) {\n return copyText(content.value);\n } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {\n return copyText(content.href);\n } else {\n return copyNode(content);\n }\n }\n}\n","import CopyButton from './copy-button.element.js';\n\nexport default CopyButton;\n\nCopyButton.define('wje-copy-button', CopyButton);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wje-copy-button.js","sources":["../packages/wje-copy-button/service/service.js","../packages/wje-copy-button/copy-button.element.js","../packages/wje-copy-button/copy-button.js"],"sourcesContent":["/**\n * Create a node with the text content.\n * @param text\n * @returns {Element}\n */\nfunction createNode(text) {\n const node = document.createElement('pre');\n node.style.width = '1px';\n node.style.height = '1px';\n node.style.position = 'fixed';\n node.style.top = '5px';\n node.textContent = text;\n return node;\n}\n\n/**\n * Copy the node to the clipboard.\n * @param node\n * @returns {Promise<never>|Promise<void>}\n */\nexport function copyNode(node) {\n if ('clipboard' in navigator) {\n return navigator.clipboard.writeText(node.textContent || '');\n }\n\n const selection = getSelection(); // Firefox return null\n if (selection === null) {\n return Promise.reject(new Error());\n }\n\n selection.removeAllRanges();\n\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.addRange(range);\n\n // document.execCommand(\"copy\")\n selection.removeAllRanges();\n return Promise.resolve();\n}\n\n/**\n * Copy the text to the clipboard.\n * @param text\n * @returns {Promise<never>|Promise<void>}\n */\nexport function copyText(text) {\n if ('clipboard' in navigator) {\n return navigator.clipboard.writeText(text);\n }\n\n const body = document.body;\n if (!body) {\n return Promise.reject(new Error());\n }\n\n const node = createNode(text);\n body.appendChild(node);\n copyNode(node);\n body.removeChild(node);\n return Promise.resolve();\n}\n","import { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport Input from '../wje-input/input.js';\nimport { copyNode, copyText } from './service/service.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary CopyButton is a custom web component that extends WJElement.\n * It provides a button that, when clicked, copies a specified text to the clipboard.\n * The text to be copied can be specified through the `value` attribute.\n * The CopyButton also supports keyboard interaction, copying the text when the space or enter key is pressed.\n * @documentation https://elements.webjet.sk/components/copy-button\n * @status stable\n * @augments WJElement\n * @attribute {string} for - The id of the element to copy content from.\n * @attribute {string} label - Accessible label for the button. Also used as fallback tooltip text when the `tooltip` attribute is present without a value.\n * @attribute {string} label-success - Text displayed in the tooltip after a successful copy. Used only when the `tooltip` attribute is present.\n * @attribute {string} tooltip - Enables the tooltip. When set to a string, the value is used as the default tooltip content.\n * @attribute {string} value - The text to be copied.\n * @slot - This is a default/unnamed slot.\n * @csspart button - Styles the button element.\n * @cssproperty --text-color - Controls the color of the text.\n * @cssproperty --background-color - Controls the background color of the button.\n * //@fires wje:copy-button - Dispatched when the button is clicked and the text is copied.\n * @tag wje-copy-button\n */\nexport default class CopyButton extends WJElement {\n /**\n * Constructor for the CopyButton class.\n * Initializes the timeout property.\n */\n constructor() {\n super();\n\n this.timeout = 1000;\n }\n\n /**\n * Setter for the value property.\n * @param {string} value The value to be set.\n */\n set value(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * Getter for the value property.\n * @returns {string} The value of the value property.\n */\n get value() {\n return this.getAttribute('value') || '';\n }\n\n className = 'CopyButton';\n\n /**\n * Getter for the cssStyleSheet property.\n * @returns {string} The CSS styles.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observedAttributes property.\n * @returns {Array} An empty array.\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the CopyButton.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the ColorPicker element.\n * @returns {DocumentFragment} The created document fragment.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n let content;\n this._tooltipElement = null;\n\n if (WjElementUtils.hasSlot(this)) {\n content = document.createElement('slot');\n } else {\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', 'clipboard');\n\n content = icon;\n this.icon = icon;\n }\n\n if (this.hasAttribute('tooltip')) {\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('offset', '5');\n tooltip.setAttribute('content', this.getAttribute('tooltip') || this.label || 'Copy');\n\n tooltip.appendChild(content);\n fragment.appendChild(tooltip);\n\n this._tooltipElement = tooltip;\n } else {\n fragment.appendChild(content);\n }\n\n return fragment;\n }\n\n /**\n * Adds event listeners for the click, focus, and blur events.\n */\n afterDraw() {\n this.syncAria();\n event.addListener(this, 'click', null, this.clicked);\n event.addListener(this, 'focus', null, this.focused);\n event.addListener(this, 'blur', null, this.blurred);\n\n event.addListener(this, 'wje-copy-button:click', null, this.copied);\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n if (!this.hasAttribute('role')) {\n this.setAriaState({ role: 'button' });\n }\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n\n const ariaLabel = this.getAttribute('aria-label');\n const label = this.getAttribute('label') || this.label || 'Copy';\n if (!ariaLabel && label) {\n this.setAriaState({ label });\n }\n\n if (this.hasAttribute('disabled')) {\n this.setAriaState({ disabled: true });\n }\n }\n\n /**\n * Handles the click event.\n * @param {Event} e The event object.\n */\n clicked = (e) => {\n const button = e.currentTarget;\n if (button instanceof HTMLElement) {\n this.copy(button);\n }\n };\n\n /**\n * Handles the keydown event.\n * @param {Event} e The event object.\n */\n keydown = (e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n const button = e.currentTarget;\n if (button instanceof HTMLElement) {\n this.copy(button);\n }\n }\n };\n\n /**\n * Handles the focus event.\n * @param {Event} e The event object.\n */\n focused = (e) => {\n e.currentTarget.addEventListener('keydown', this.keydown);\n };\n\n /**\n * Handles the blur event.\n * @param {Event} e The event object.\n */\n blurred = (e) => {\n e.currentTarget.removeEventListener('keydown', this.keydown);\n };\n\n /**\n * Handles the copied event.\n * You can override this method to customize the behavior when the text is copied.\n */\n copied = () => {\n if (this.hasOwnProperty('icon')) {\n this.icon.setAttribute('color', 'success');\n this.icon.setAttribute('name', 'check');\n }\n\n if (this._tooltipElement) {\n this._tooltipElement.setAttribute('content', this.labelSuccess || 'Copied');\n }\n\n setTimeout(() => {\n if (this.hasOwnProperty('icon')) {\n this.icon.removeAttribute('color');\n this.icon.setAttribute('name', 'clipboard');\n }\n\n if (this._tooltipElement) {\n this._tooltipElement.setAttribute('content', this.getAttribute('tooltip') || this.label || 'Copy');\n }\n }, this.timeout);\n };\n\n /**\n * Copies the specified text or node.\n * @param {HTMLElement} button The button element.\n */\n async copy(button) {\n const id = this.getAttribute('for');\n const text = this.getAttribute('value');\n\n if (button.getAttribute('aria-disabled') === 'true') {\n return;\n }\n\n if (text) {\n await copyText(text);\n event.dispatchCustomEvent(this, 'wje-copy-button:click');\n } else if (id) {\n const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;\n if (!(root instanceof Document || ('ShadowRoot' in window && root instanceof ShadowRoot))) return;\n\n const node = root.getElementById(id);\n if (node) {\n await this.copyTarget(node);\n event.dispatchCustomEvent(this, 'wje-copy-button:click');\n }\n }\n }\n\n /**\n * Copies the target content.\n * @param {HTMLElement} content The content to be copied.\n * @returns {Promise} A promise that resolves when the content is copied.\n */\n copyTarget(content) {\n if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement || content instanceof Input) {\n return copyText(content.value);\n } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {\n return copyText(content.href);\n } else {\n return copyNode(content);\n }\n }\n}\n","import CopyButton from './copy-button.element.js';\n\nexport default CopyButton;\n\nCopyButton.define('wje-copy-button', CopyButton);\n"],"names":["copyNode","node","navigator","clipboard","writeText","textContent","selection","getSelection","Promise","reject","Error","removeAllRanges","range","document","createRange","selectNodeContents","addRange","resolve","copyText","text","body","createElement","style","width","height","position","top","appendChild","removeChild","CopyButton","WJElement","constructor","super","className","clicked","e","button","currentTarget","HTMLElement","this","copy","keydown","key","focused","addEventListener","blurred","removeEventListener","copied","hasOwnProperty","icon","setAttribute","_tooltipElement","labelSuccess","setTimeout","removeAttribute","getAttribute","label","timeout","value","cssStyleSheet","observedAttributes","setupAttributes","isShadowRoot","syncAria","draw","content","fragment","createDocumentFragment","WjElementUtils","hasSlot","hasAttribute","tooltip","afterDraw","event","addListener","setAriaState","role","ariaLabel","disabled","id","dispatchCustomEvent","root","Element","prototype","getRootNode","ownerDocument","Document","window","ShadowRoot","getElementById","copyTarget","HTMLInputElement","HTMLTextAreaElement","Input","HTMLAnchorElement","href","define"],"mappings":";;;;;;;AAoBO,SAASA,EAASC,IAAAA;AACrB,MAAI,eAAeC,UACf,QAAOA,UAAUC,UAAUC,UAAUH,GAAKI,eAAe,EAAA;AAG7D,QAAMC,KAAYC,aAAAA;AAClB,MAAkB,SAAdD,GACA,QAAOE,QAAQC,OAAO,IAAIC,OAAAA;AAG9BJ,EAAAA,GAAUK,gBAAAA;AAEV,QAAMC,KAAQC,SAASC,YAAAA;AAMvB,SALAF,GAAMG,mBAAmBd,EAAAA,GACzBK,GAAUU,SAASJ,EAAAA,GAGnBN,GAAUK,gBAAAA,GACHH,QAAQS,QAAAA;AACnB;AAOO,SAASC,EAASC,IAAAA;AACrB,MAAI,eAAejB,UACf,QAAOA,UAAUC,UAAUC,UAAUe,EAAAA;AAGzC,QAAMC,KAAOP,SAASO;AACtB,MAAA,CAAKA,GACD,QAAOZ,QAAQC,OAAO,IAAIC,OAAAA;AAG9B,QAAMT,MAnDV,SAAoBkB,IAAAA;AAChB,UAAMlB,KAAOY,SAASQ,cAAc,KAAA;AAMpC,WALApB,GAAKqB,MAAMC,QAAQ,OACnBtB,GAAKqB,MAAME,SAAS,OACpBvB,GAAKqB,MAAMG,WAAW,SACtBxB,GAAKqB,MAAMI,MAAM,OACjBzB,GAAKI,cAAcc,IACZlB;AAAAA,EACX,GA2C4BkB,EAAAA;AAIxB,SAHAC,GAAKO,YAAY1B,EAAAA,GACjBD,EAASC,EAAAA,GACTmB,GAAKQ,YAAY3B,EAAAA,GACVO,QAAQS,QAAAA;AACnB;ACpCe,MAAMY,UAAmBC,EAAAA;AAAAA,EAKpC,cAAAC;AACIC,UAAAA;AAqBJC,qCAAY;AAoGZC,mCAAWC,CAAAA,OAAAA;AACP,YAAMC,KAASD,GAAEE;AACbD,MAAAA,cAAkBE,eAClBC,KAAKC,KAAKJ,EAAAA;AAAAA,IAAAA;AAQlBK,mCAAWN,CAAAA,OAAAA;AACP,UAAc,QAAVA,GAAEO,OAAyB,YAAVP,GAAEO,KAAiB;AACpC,cAAMN,KAASD,GAAEE;AACbD,QAAAA,cAAkBE,eAClBC,KAAKC,KAAKJ,EAAAA;AAAAA,MAElB;AAAA,IAAA;AAOJO,mCAAWR,CAAAA,OAAAA;AACPA,MAAAA,GAAEE,cAAcO,iBAAiB,WAAWL,KAAKE,OAAAA;AAAAA,IAAAA;AAOrDI,mCAAWV,CAAAA,OAAAA;AACPA,MAAAA,GAAEE,cAAcS,oBAAoB,WAAWP,KAAKE,OAAAA;AAAAA,IAAAA;AAOxDM,kCAAS,MAAA;AACDR,WAAKS,eAAe,MAAA,MACpBT,KAAKU,KAAKC,aAAa,SAAS,SAAA,GAChCX,KAAKU,KAAKC,aAAa,QAAQ,OAAA,IAG/BX,KAAKY,mBACLZ,KAAKY,gBAAgBD,aAAa,WAAWX,KAAKa,gBAAgB,QAAA,GAGtEC,WAAW,MAAA;AACHd,aAAKS,eAAe,MAAA,MACpBT,KAAKU,KAAKK,gBAAgB,OAAA,GAC1Bf,KAAKU,KAAKC,aAAa,QAAQ,WAAA,IAG/BX,KAAKY,mBACLZ,KAAKY,gBAAgBD,aAAa,WAAWX,KAAKgB,aAAa,SAAA,KAAchB,KAAKiB,SAAS,MAAA;AAAA,MAAA,GAEhGjB,KAAKkB,OAAAA;AAAAA,IAAAA;AAlLRlB,SAAKkB,UAAU;AAAA,EACnB;AAAA,EAMA,IAAA,MAAUC,IAAAA;AACNnB,SAAKW,aAAa,SAASQ,EAAAA;AAAAA,EAC/B;AAAA,EAMA,IAAA,QAAIA;AACA,WAAOnB,KAAKgB,aAAa,OAAA,KAAY;AAAA,EACzC;AAAA,EAQA,WAAA,gBAAWI;AACP;EACJ;AAAA,EAMA,WAAA,qBAAWC;AACP,WAAO,CAAA;AAAA,EACX;AAAA,EAKA,kBAAAC;AACItB,SAAKuB,eAAe,QACpBvB,KAAKwB,SAAAA;AAAAA,EACT;AAAA,EAMA,OAAAC;AACI,QACIC,IADAC,KAAWrD,SAASsD,uBAAAA;AAIxB,QAFA5B,KAAKY,kBAAkB,MAEnBiB,EAAeC,QAAQ9B,IAAAA,EACvB0B,CAAAA,KAAUpD,SAASQ,cAAc,MAAA;AAAA,SAC9B;AACH,UAAI4B,KAAOpC,SAASQ,cAAc,UAAA;AAClC4B,MAAAA,GAAKC,aAAa,QAAQ,WAAA,GAE1Be,KAAUhB,IACVV,KAAKU,OAAOA;AAAAA,IAChB;AAEA,QAAIV,KAAK+B,aAAa,SAAA,GAAY;AAC9B,UAAIC,KAAU1D,SAASQ,cAAc,aAAA;AACrCkD,MAAAA,GAAQrB,aAAa,UAAU,GAAA,GAC/BqB,GAAQrB,aAAa,WAAWX,KAAKgB,aAAa,SAAA,KAAchB,KAAKiB,SAAS,MAAA,GAE9Ee,GAAQ5C,YAAYsC,EAAAA,GACpBC,GAASvC,YAAY4C,EAAAA,GAErBhC,KAAKY,kBAAkBoB;AAAAA,IAC3B,MACIL,CAAAA,GAASvC,YAAYsC,EAAAA;AAGzB,WAAOC;AAAAA,EACX;AAAA,EAKA,YAAAM;AACIjC,SAAKwB,SAAAA,GACLU,EAAMC,YAAYnC,MAAM,SAAS,MAAMA,KAAKL,OAAAA,GAC5CuC,EAAMC,YAAYnC,MAAM,SAAS,MAAMA,KAAKI,OAAAA,GAC5C8B,EAAMC,YAAYnC,MAAM,QAAQ,MAAMA,KAAKM,OAAAA,GAE3C4B,EAAMC,YAAYnC,MAAM,yBAAyB,MAAMA,KAAKQ,MAAAA;AAAAA,EAChE;AAAA,EAKA,WAAAgB;AACSxB,SAAK+B,aAAa,MAAA,KACnB/B,KAAKoC,aAAa,EAAEC,MAAM,SAAA,CAAA,GAGzBrC,KAAK+B,aAAa,eACnB/B,KAAKW,aAAa,YAAY,GAAA;AAGlC,UAAM2B,KAAYtC,KAAKgB,aAAa,YAAA,GAC9BC,KAAQjB,KAAKgB,aAAa,OAAA,KAAYhB,KAAKiB,SAAS;AAAA,KACrDqB,MAAarB,MACdjB,KAAKoC,aAAa,EAAEnB,OAAAA,GAAAA,CAAAA,GAGpBjB,KAAK+B,aAAa,UAAA,KAClB/B,KAAKoC,aAAa,EAAEG,UAAAA,KAAU,CAAA;AAAA,EAEtC;AAAA,EAwEA,MAAA,KAAW1C,IAAAA;AACP,UAAM2C,KAAKxC,KAAKgB,aAAa,KAAA,GACvBpC,KAAOoB,KAAKgB,aAAa,OAAA;AAE/B,QAA6C,WAAzCnB,GAAOmB,aAAa,eAAA;AAIxB,UAAIpC,GAAAA,OACMD,EAASC,EAAAA,GACfsD,EAAMO,oBAAoBzC,MAAM,uBAAA;AAAA,eACzBwC,IAAI;AACX,cAAME,KAAO,iBAAiBC,QAAQC,YAAY/C,GAAOgD,YAAAA,IAAgBhD,GAAOiD;AAChF,YAAA,EAAMJ,cAAgBK,YAAa,gBAAgBC,UAAUN,cAAgBO,YAAc;AAE3F,cAAMvF,KAAOgF,GAAKQ,eAAeV,EAAAA;AAC7B9E,QAAAA,OAAAA,MACMsC,KAAKmD,WAAWzF,EAAAA,GACtBwE,EAAMO,oBAAoBzC,MAAM,uBAAA;AAAA,MAExC;AAAA;AAAA,EACJ;AAAA,EAOA,WAAW0B,IAAAA;AACP,WAAIA,cAAmB0B,oBAAoB1B,cAAmB2B,uBAAuB3B,cAAmB4B,IAC7F3E,EAAS+C,GAAQP,KAAAA,IACjBO,cAAmB6B,qBAAqB7B,GAAQK,aAAa,MAAA,IAC7DpD,EAAS+C,GAAQ8B,IAAAA,IAEjB/F,EAASiE,EAAAA;AAAAA,EAExB;AAAA;AC1PJpC,EAAWmE,OAAO,mBAAmBnE,CAAAA;"}