wj-elements 0.7.7 → 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 (233) 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 +11504 -11499
  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/permissions.js +14 -41
  22. package/dist/permissions.js.map +1 -1
  23. package/dist/popup.element-CbkhthPP.js +806 -0
  24. package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
  25. package/dist/router-links-CNsJ-elb.js +105 -0
  26. package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
  27. package/dist/skeleton.css +1 -197
  28. package/dist/styles.css +1 -866
  29. package/dist/universal-service.js +48 -109
  30. package/dist/universal-service.js.map +1 -1
  31. package/dist/utils.js +11 -18
  32. package/dist/utils.js.map +1 -1
  33. package/dist/web-types.json +760 -760
  34. package/dist/wje-accordion-item.js +33 -106
  35. package/dist/wje-accordion-item.js.map +1 -1
  36. package/dist/wje-accordion.js +19 -84
  37. package/dist/wje-accordion.js.map +1 -1
  38. package/dist/wje-animation.js +37 -4258
  39. package/dist/wje-animation.js.map +1 -1
  40. package/dist/wje-aside.js +9 -34
  41. package/dist/wje-aside.js.map +1 -1
  42. package/dist/wje-avatar.js +36 -126
  43. package/dist/wje-avatar.js.map +1 -1
  44. package/dist/wje-badge.js +10 -52
  45. package/dist/wje-badge.js.map +1 -1
  46. package/dist/wje-breadcrumb.js +205 -672
  47. package/dist/wje-breadcrumb.js.map +1 -1
  48. package/dist/wje-breadcrumbs.js +177 -633
  49. package/dist/wje-breadcrumbs.js.map +1 -1
  50. package/dist/wje-button-group.js +48 -153
  51. package/dist/wje-button-group.js.map +1 -1
  52. package/dist/wje-button.js +92 -413
  53. package/dist/wje-button.js.map +1 -1
  54. package/dist/wje-card-content.js +7 -30
  55. package/dist/wje-card-content.js.map +1 -1
  56. package/dist/wje-card-controls.js +7 -30
  57. package/dist/wje-card-controls.js.map +1 -1
  58. package/dist/wje-card-header.js +7 -30
  59. package/dist/wje-card-header.js.map +1 -1
  60. package/dist/wje-card-subtitle.js +7 -34
  61. package/dist/wje-card-subtitle.js.map +1 -1
  62. package/dist/wje-card-title.js +7 -34
  63. package/dist/wje-card-title.js.map +1 -1
  64. package/dist/wje-card.js +15 -71
  65. package/dist/wje-card.js.map +1 -1
  66. package/dist/wje-carousel-item.js +12 -56
  67. package/dist/wje-carousel-item.js.map +1 -1
  68. package/dist/wje-carousel.js +154 -509
  69. package/dist/wje-carousel.js.map +1 -1
  70. package/dist/wje-checkbox.js +50 -227
  71. package/dist/wje-checkbox.js.map +1 -1
  72. package/dist/wje-chip.js +43 -160
  73. package/dist/wje-chip.js.map +1 -1
  74. package/dist/wje-col.js +7 -20
  75. package/dist/wje-col.js.map +1 -1
  76. package/dist/wje-color-picker.js +445 -1464
  77. package/dist/wje-color-picker.js.map +1 -1
  78. package/dist/wje-container.js +9 -35
  79. package/dist/wje-container.js.map +1 -1
  80. package/dist/wje-copy-button.js +64 -204
  81. package/dist/wje-copy-button.js.map +1 -1
  82. package/dist/wje-dialog.js +85 -553
  83. package/dist/wje-dialog.js.map +1 -1
  84. package/dist/wje-divider.js +7 -34
  85. package/dist/wje-divider.js.map +1 -1
  86. package/dist/wje-dropdown.js +78 -305
  87. package/dist/wje-dropdown.js.map +1 -1
  88. package/dist/wje-element.js +191 -700
  89. package/dist/wje-element.js.map +1 -1
  90. package/dist/wje-file-upload-item.js +51 -156
  91. package/dist/wje-file-upload-item.js.map +1 -1
  92. package/dist/wje-file-upload.js +181 -619
  93. package/dist/wje-file-upload.js.map +1 -1
  94. package/dist/wje-footer.js +7 -31
  95. package/dist/wje-footer.js.map +1 -1
  96. package/dist/wje-form.js +7 -32
  97. package/dist/wje-form.js.map +1 -1
  98. package/dist/wje-format-digital.js +26 -118
  99. package/dist/wje-format-digital.js.map +1 -1
  100. package/dist/wje-grid.js +7 -33
  101. package/dist/wje-grid.js.map +1 -1
  102. package/dist/wje-header.js +9 -35
  103. package/dist/wje-header.js.map +1 -1
  104. package/dist/wje-icon-library.js +12 -18
  105. package/dist/wje-icon-library.js.map +1 -1
  106. package/dist/wje-icon-picker.js +65 -320
  107. package/dist/wje-icon-picker.js.map +1 -1
  108. package/dist/wje-icon.js +1 -1
  109. package/dist/wje-img-comparer.js +37 -114
  110. package/dist/wje-img-comparer.js.map +1 -1
  111. package/dist/wje-img.js +50 -198
  112. package/dist/wje-img.js.map +1 -1
  113. package/dist/wje-infinite-scroll.js +94 -346
  114. package/dist/wje-infinite-scroll.js.map +1 -1
  115. package/dist/wje-input-file.js +23 -84
  116. package/dist/wje-input-file.js.map +1 -1
  117. package/dist/wje-input.js +78 -392
  118. package/dist/wje-input.js.map +1 -1
  119. package/dist/wje-item.js +11 -64
  120. package/dist/wje-item.js.map +1 -1
  121. package/dist/wje-kanban.js +124 -401
  122. package/dist/wje-kanban.js.map +1 -1
  123. package/dist/wje-label.js +9 -32
  124. package/dist/wje-label.js.map +1 -1
  125. package/dist/wje-level-indicator.js +38 -157
  126. package/dist/wje-level-indicator.js.map +1 -1
  127. package/dist/wje-list.js +10 -40
  128. package/dist/wje-list.js.map +1 -1
  129. package/dist/wje-main.js +7 -31
  130. package/dist/wje-main.js.map +1 -1
  131. package/dist/wje-masonry.js +66 -211
  132. package/dist/wje-masonry.js.map +1 -1
  133. package/dist/wje-master.js +45 -161
  134. package/dist/wje-master.js.map +1 -1
  135. package/dist/wje-menu-button.js +10 -38
  136. package/dist/wje-menu-button.js.map +1 -1
  137. package/dist/wje-menu-item.js +127 -577
  138. package/dist/wje-menu-item.js.map +1 -1
  139. package/dist/wje-menu-label.js +9 -35
  140. package/dist/wje-menu-label.js.map +1 -1
  141. package/dist/wje-menu.js +14 -49
  142. package/dist/wje-menu.js.map +1 -1
  143. package/dist/wje-option.js +48 -279
  144. package/dist/wje-option.js.map +1 -1
  145. package/dist/wje-options.js +130 -384
  146. package/dist/wje-options.js.map +1 -1
  147. package/dist/wje-orgchart-group.js +16 -52
  148. package/dist/wje-orgchart-group.js.map +1 -1
  149. package/dist/wje-orgchart-item.js +24 -93
  150. package/dist/wje-orgchart-item.js.map +1 -1
  151. package/dist/wje-orgchart.js +18 -68
  152. package/dist/wje-orgchart.js.map +1 -1
  153. package/dist/wje-pagination.js +113 -397
  154. package/dist/wje-pagination.js.map +1 -1
  155. package/dist/wje-popup.js +3 -3
  156. package/dist/wje-popup.js.map +1 -1
  157. package/dist/wje-progress-bar.js +53 -205
  158. package/dist/wje-progress-bar.js.map +1 -1
  159. package/dist/wje-qr-code.js +398 -2980
  160. package/dist/wje-qr-code.js.map +1 -1
  161. package/dist/wje-radio-group.js +52 -190
  162. package/dist/wje-radio-group.js.map +1 -1
  163. package/dist/wje-radio.js +24 -118
  164. package/dist/wje-radio.js.map +1 -1
  165. package/dist/wje-rate.js +62 -266
  166. package/dist/wje-rate.js.map +1 -1
  167. package/dist/wje-relative-time.js +24 -99
  168. package/dist/wje-relative-time.js.map +1 -1
  169. package/dist/wje-reorder-dropzone.js +9 -31
  170. package/dist/wje-reorder-dropzone.js.map +1 -1
  171. package/dist/wje-reorder-handle.js +67 -204
  172. package/dist/wje-reorder-handle.js.map +1 -1
  173. package/dist/wje-reorder-item.js +14 -44
  174. package/dist/wje-reorder-item.js.map +1 -1
  175. package/dist/wje-reorder.js +61 -246
  176. package/dist/wje-reorder.js.map +1 -1
  177. package/dist/wje-route.js +6 -24
  178. package/dist/wje-route.js.map +1 -1
  179. package/dist/wje-router-link.js +11 -39
  180. package/dist/wje-router-link.js.map +1 -1
  181. package/dist/wje-router-outlet.js +76 -172
  182. package/dist/wje-router-outlet.js.map +1 -1
  183. package/dist/wje-routerx.js +537 -1331
  184. package/dist/wje-routerx.js.map +1 -1
  185. package/dist/wje-row.js +9 -31
  186. package/dist/wje-row.js.map +1 -1
  187. package/dist/wje-select.js +326 -1152
  188. package/dist/wje-select.js.map +1 -1
  189. package/dist/wje-slider.js +44 -225
  190. package/dist/wje-slider.js.map +1 -1
  191. package/dist/wje-sliding-container.js +295 -1319
  192. package/dist/wje-sliding-container.js.map +1 -1
  193. package/dist/wje-split-view.js +35 -121
  194. package/dist/wje-split-view.js.map +1 -1
  195. package/dist/wje-status.js +14 -45
  196. package/dist/wje-status.js.map +1 -1
  197. package/dist/wje-step.js +9 -32
  198. package/dist/wje-step.js.map +1 -1
  199. package/dist/wje-stepper.js +109 -357
  200. package/dist/wje-stepper.js.map +1 -1
  201. package/dist/wje-store.js +67 -360
  202. package/dist/wje-store.js.map +1 -1
  203. package/dist/wje-tab-group.js +85 -314
  204. package/dist/wje-tab-group.js.map +1 -1
  205. package/dist/wje-tab-panel.js +7 -28
  206. package/dist/wje-tab-panel.js.map +1 -1
  207. package/dist/wje-tab.js +21 -198
  208. package/dist/wje-tab.js.map +1 -1
  209. package/dist/wje-textarea.js +64 -264
  210. package/dist/wje-textarea.js.map +1 -1
  211. package/dist/wje-thumbnail.js +10 -51
  212. package/dist/wje-thumbnail.js.map +1 -1
  213. package/dist/wje-toast.js +127 -632
  214. package/dist/wje-toast.js.map +1 -1
  215. package/dist/wje-toggle.js +52 -177
  216. package/dist/wje-toggle.js.map +1 -1
  217. package/dist/wje-toolbar-action.js +128 -456
  218. package/dist/wje-toolbar-action.js.map +1 -1
  219. package/dist/wje-toolbar.js +75 -270
  220. package/dist/wje-toolbar.js.map +1 -1
  221. package/dist/wje-tooltip.js +50 -161
  222. package/dist/wje-tooltip.js.map +1 -1
  223. package/dist/wje-tree-item.js +70 -301
  224. package/dist/wje-tree-item.js.map +1 -1
  225. package/dist/wje-tree.js +145 -489
  226. package/dist/wje-tree.js.map +1 -1
  227. package/dist/wje-visually-hidden.js +7 -34
  228. package/dist/wje-visually-hidden.js.map +1 -1
  229. package/package.json +3 -2
  230. package/dist/form-associated-element-DEQ4y-jn.js +0 -245
  231. package/dist/icon-CReYMzAK.js +0 -245
  232. package/dist/popup.element-CwXvVFK7.js +0 -2133
  233. 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":"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"}