@dso-toolkit/core 62.10.0 → 62.12.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 (197) hide show
  1. package/dist/cjs/dso-accordion-section.cjs.entry.js +1 -1
  2. package/dist/cjs/dso-accordion-section.cjs.entry.js.map +1 -1
  3. package/dist/cjs/dso-action-list-item.cjs.entry.js +1 -1
  4. package/dist/cjs/dso-action-list-item.cjs.entry.js.map +1 -1
  5. package/dist/cjs/dso-action-list.cjs.entry.js +1 -1
  6. package/dist/cjs/dso-action-list.cjs.entry.js.map +1 -1
  7. package/dist/cjs/dso-alert_7.cjs.entry.js +6 -7
  8. package/dist/cjs/dso-alert_7.cjs.entry.js.map +1 -1
  9. package/dist/cjs/dso-annotation-output_3.cjs.entry.js +2 -2
  10. package/dist/cjs/dso-annotation-output_3.cjs.entry.js.map +1 -1
  11. package/dist/cjs/dso-card.cjs.entry.js +5 -2
  12. package/dist/cjs/dso-card.cjs.entry.js.map +1 -1
  13. package/dist/cjs/dso-dropdown-menu.cjs.entry.js +36 -10
  14. package/dist/cjs/dso-dropdown-menu.cjs.entry.js.map +1 -1
  15. package/dist/cjs/dso-header.cjs.entry.js +1 -1
  16. package/dist/cjs/dso-header.cjs.entry.js.map +1 -1
  17. package/dist/cjs/dso-helpcenter-panel.cjs.entry.js +1 -2
  18. package/dist/cjs/dso-helpcenter-panel.cjs.entry.js.map +1 -1
  19. package/dist/cjs/dso-highlight-box.cjs.entry.js +2 -10
  20. package/dist/cjs/dso-highlight-box.cjs.entry.js.map +1 -1
  21. package/dist/cjs/dso-icon.cjs.entry.js +1 -1
  22. package/dist/cjs/dso-info_2.cjs.entry.js +1 -1
  23. package/dist/cjs/dso-info_2.cjs.entry.js.map +1 -1
  24. package/dist/cjs/dso-list-button.cjs.entry.js +2 -3
  25. package/dist/cjs/dso-list-button.cjs.entry.js.map +1 -1
  26. package/dist/cjs/dso-modal.cjs.entry.js +1 -1
  27. package/dist/cjs/dso-modal.cjs.entry.js.map +1 -1
  28. package/dist/cjs/dso-toolkit.cjs.js +1 -1
  29. package/dist/cjs/dso-viewer-grid.cjs.entry.js +1 -1
  30. package/dist/cjs/dso-viewer-grid.cjs.entry.js.map +1 -1
  31. package/dist/cjs/{focus-trap.esm-6cff35a7.js → focus-trap.esm-1633a28f.js} +584 -16
  32. package/dist/cjs/focus-trap.esm-1633a28f.js.map +1 -0
  33. package/dist/cjs/loader.cjs.js +1 -1
  34. package/dist/collection/components/accordion/components/accordion-section.css +1 -1
  35. package/dist/collection/components/action-list/action-list.css +18 -1
  36. package/dist/collection/components/action-list/components/action-list-item.css +0 -12
  37. package/dist/collection/components/alert/alert.css +0 -20
  38. package/dist/collection/components/annotation-output/annotation-output.css +17 -0
  39. package/dist/collection/components/badge/badge.css +8 -5
  40. package/dist/collection/components/card/card.css +22 -9
  41. package/dist/collection/components/card/card.js +21 -1
  42. package/dist/collection/components/card/card.js.map +1 -1
  43. package/dist/collection/components/document-component/document-component.css +41 -9
  44. package/dist/collection/components/dropdown-menu/dropdown-menu.js +34 -7
  45. package/dist/collection/components/dropdown-menu/dropdown-menu.js.map +1 -1
  46. package/dist/collection/components/header/header.css +1 -1
  47. package/dist/collection/components/highlight-box/highlight-box.css +20 -56
  48. package/dist/collection/components/highlight-box/highlight-box.js +7 -15
  49. package/dist/collection/components/highlight-box/highlight-box.js.map +1 -1
  50. package/dist/collection/components/info/info.css +0 -2
  51. package/dist/collection/components/label/label.css +15 -4
  52. package/dist/collection/components/list-button/list-button.css +4 -0
  53. package/dist/collection/components/modal/modal.css +2 -2
  54. package/dist/collection/components/ozon-content/ozon-content.css +83 -19
  55. package/dist/collection/components/table/table.css +2 -2
  56. package/dist/collection/components/viewer-grid/viewer-grid.css +4 -4
  57. package/dist/components/alert.js +1 -1
  58. package/dist/components/alert.js.map +1 -1
  59. package/dist/components/annotation-output.js +1 -1
  60. package/dist/components/annotation-output.js.map +1 -1
  61. package/dist/components/badge.js +1 -1
  62. package/dist/components/badge.js.map +1 -1
  63. package/dist/components/document-component.js +1 -1
  64. package/dist/components/document-component.js.map +1 -1
  65. package/dist/components/dropdown-menu.js +34 -8
  66. package/dist/components/dropdown-menu.js.map +1 -1
  67. package/dist/components/dso-accordion-section.js +1 -1
  68. package/dist/components/dso-accordion-section.js.map +1 -1
  69. package/dist/components/dso-action-list-item.js +1 -1
  70. package/dist/components/dso-action-list-item.js.map +1 -1
  71. package/dist/components/dso-action-list.js +1 -1
  72. package/dist/components/dso-action-list.js.map +1 -1
  73. package/dist/components/dso-card.js +7 -3
  74. package/dist/components/dso-card.js.map +1 -1
  75. package/dist/components/dso-header.js +1 -1
  76. package/dist/components/dso-header.js.map +1 -1
  77. package/dist/components/dso-highlight-box.js +8 -16
  78. package/dist/components/dso-highlight-box.js.map +1 -1
  79. package/dist/components/dso-list-button.js +1 -1
  80. package/dist/components/dso-list-button.js.map +1 -1
  81. package/dist/components/dso-modal.js +1 -1
  82. package/dist/components/dso-modal.js.map +1 -1
  83. package/dist/components/dso-viewer-grid.js +1 -1
  84. package/dist/components/dso-viewer-grid.js.map +1 -1
  85. package/dist/components/focus-trap.esm.js +569 -2
  86. package/dist/components/focus-trap.esm.js.map +1 -1
  87. package/dist/components/icon.js +1 -1
  88. package/dist/components/info.js +1 -1
  89. package/dist/components/info.js.map +1 -1
  90. package/dist/components/label.js +1 -1
  91. package/dist/components/label.js.map +1 -1
  92. package/dist/components/ozon-content.js +1 -1
  93. package/dist/components/ozon-content.js.map +1 -1
  94. package/dist/components/table.js +1 -1
  95. package/dist/components/table.js.map +1 -1
  96. package/dist/dso-toolkit/dso-toolkit.esm.js +1 -1
  97. package/dist/dso-toolkit/dso-toolkit.esm.js.map +1 -1
  98. package/dist/dso-toolkit/p-1faa1497.entry.js +2 -0
  99. package/dist/dso-toolkit/{p-eb7275e9.entry.js.map → p-1faa1497.entry.js.map} +1 -1
  100. package/dist/dso-toolkit/p-2862c19a.entry.js +2 -0
  101. package/dist/dso-toolkit/{p-35dae23f.entry.js.map → p-2862c19a.entry.js.map} +1 -1
  102. package/dist/dso-toolkit/p-31825ec2.entry.js +2 -0
  103. package/dist/dso-toolkit/{p-336aefb5.entry.js.map → p-31825ec2.entry.js.map} +1 -1
  104. package/dist/dso-toolkit/p-4e5a6107.entry.js +2 -0
  105. package/dist/dso-toolkit/p-4e5a6107.entry.js.map +1 -0
  106. package/dist/dso-toolkit/p-5595d073.entry.js +2 -0
  107. package/dist/dso-toolkit/{p-638ad5e5.entry.js.map → p-5595d073.entry.js.map} +1 -1
  108. package/dist/dso-toolkit/p-5def1d28.entry.js +2 -0
  109. package/dist/dso-toolkit/p-5def1d28.entry.js.map +1 -0
  110. package/dist/dso-toolkit/p-67461818.entry.js +2 -0
  111. package/dist/dso-toolkit/{p-977dde7f.entry.js.map → p-67461818.entry.js.map} +1 -1
  112. package/dist/dso-toolkit/p-7bcce109.entry.js +2 -0
  113. package/dist/dso-toolkit/{p-193b7e46.entry.js.map → p-7bcce109.entry.js.map} +1 -1
  114. package/dist/dso-toolkit/p-92fd9516.entry.js +2 -0
  115. package/dist/dso-toolkit/p-92fd9516.entry.js.map +1 -0
  116. package/dist/dso-toolkit/p-9bf33855.entry.js +2 -0
  117. package/dist/dso-toolkit/{p-a3f28ef2.entry.js.map → p-9bf33855.entry.js.map} +1 -1
  118. package/dist/dso-toolkit/p-9c0f67c8.js +10 -0
  119. package/dist/dso-toolkit/p-9c0f67c8.js.map +1 -0
  120. package/dist/dso-toolkit/{p-bf04808f.entry.js → p-aa6d1e42.entry.js} +2 -2
  121. package/dist/dso-toolkit/{p-bf04808f.entry.js.map → p-aa6d1e42.entry.js.map} +1 -1
  122. package/dist/dso-toolkit/p-c9fbf040.entry.js +2 -0
  123. package/dist/dso-toolkit/p-c9fbf040.entry.js.map +1 -0
  124. package/dist/dso-toolkit/p-e5ecc82f.entry.js +2 -0
  125. package/dist/dso-toolkit/p-e5ecc82f.entry.js.map +1 -0
  126. package/dist/dso-toolkit/p-eeacda43.entry.js +2 -0
  127. package/dist/dso-toolkit/{p-e348d48b.entry.js.map → p-eeacda43.entry.js.map} +1 -1
  128. package/dist/dso-toolkit/p-f4cb0d36.entry.js +2 -0
  129. package/dist/dso-toolkit/{p-b36ab83a.entry.js.map → p-f4cb0d36.entry.js.map} +1 -1
  130. package/dist/esm/dso-accordion-section.entry.js +1 -1
  131. package/dist/esm/dso-accordion-section.entry.js.map +1 -1
  132. package/dist/esm/dso-action-list-item.entry.js +1 -1
  133. package/dist/esm/dso-action-list-item.entry.js.map +1 -1
  134. package/dist/esm/dso-action-list.entry.js +1 -1
  135. package/dist/esm/dso-action-list.entry.js.map +1 -1
  136. package/dist/esm/dso-alert_7.entry.js +6 -7
  137. package/dist/esm/dso-alert_7.entry.js.map +1 -1
  138. package/dist/esm/dso-annotation-output_3.entry.js +2 -2
  139. package/dist/esm/dso-annotation-output_3.entry.js.map +1 -1
  140. package/dist/esm/dso-card.entry.js +5 -2
  141. package/dist/esm/dso-card.entry.js.map +1 -1
  142. package/dist/esm/dso-dropdown-menu.entry.js +34 -8
  143. package/dist/esm/dso-dropdown-menu.entry.js.map +1 -1
  144. package/dist/esm/dso-header.entry.js +1 -1
  145. package/dist/esm/dso-header.entry.js.map +1 -1
  146. package/dist/esm/dso-helpcenter-panel.entry.js +1 -2
  147. package/dist/esm/dso-helpcenter-panel.entry.js.map +1 -1
  148. package/dist/esm/dso-highlight-box.entry.js +3 -11
  149. package/dist/esm/dso-highlight-box.entry.js.map +1 -1
  150. package/dist/esm/dso-icon.entry.js +1 -1
  151. package/dist/esm/dso-info_2.entry.js +1 -1
  152. package/dist/esm/dso-info_2.entry.js.map +1 -1
  153. package/dist/esm/dso-list-button.entry.js +2 -3
  154. package/dist/esm/dso-list-button.entry.js.map +1 -1
  155. package/dist/esm/dso-modal.entry.js +1 -1
  156. package/dist/esm/dso-modal.entry.js.map +1 -1
  157. package/dist/esm/dso-toolkit.js +1 -1
  158. package/dist/esm/dso-viewer-grid.entry.js +1 -1
  159. package/dist/esm/dso-viewer-grid.entry.js.map +1 -1
  160. package/dist/esm/{focus-trap.esm-d8deb1f0.js → focus-trap.esm-22fb5633.js} +570 -3
  161. package/dist/esm/focus-trap.esm-22fb5633.js.map +1 -0
  162. package/dist/esm/loader.js +1 -1
  163. package/dist/types/components/card/card.d.ts +6 -0
  164. package/dist/types/components/dropdown-menu/dropdown-menu.d.ts +2 -1
  165. package/dist/types/components.d.ts +8 -0
  166. package/package.json +2 -2
  167. package/dist/cjs/focus-trap.esm-6cff35a7.js.map +0 -1
  168. package/dist/cjs/index.esm-970bc106.js +0 -578
  169. package/dist/cjs/index.esm-970bc106.js.map +0 -1
  170. package/dist/components/index.esm.js +0 -572
  171. package/dist/components/index.esm.js.map +0 -1
  172. package/dist/dso-toolkit/p-09e0f1a6.entry.js +0 -2
  173. package/dist/dso-toolkit/p-09e0f1a6.entry.js.map +0 -1
  174. package/dist/dso-toolkit/p-193b7e46.entry.js +0 -2
  175. package/dist/dso-toolkit/p-33416b1d.entry.js +0 -2
  176. package/dist/dso-toolkit/p-33416b1d.entry.js.map +0 -1
  177. package/dist/dso-toolkit/p-336aefb5.entry.js +0 -2
  178. package/dist/dso-toolkit/p-35dae23f.entry.js +0 -2
  179. package/dist/dso-toolkit/p-39962ce8.entry.js +0 -2
  180. package/dist/dso-toolkit/p-39962ce8.entry.js.map +0 -1
  181. package/dist/dso-toolkit/p-482c8ebd.entry.js +0 -2
  182. package/dist/dso-toolkit/p-482c8ebd.entry.js.map +0 -1
  183. package/dist/dso-toolkit/p-638ad5e5.entry.js +0 -2
  184. package/dist/dso-toolkit/p-86133aa5.js +0 -6
  185. package/dist/dso-toolkit/p-86133aa5.js.map +0 -1
  186. package/dist/dso-toolkit/p-977dde7f.entry.js +0 -2
  187. package/dist/dso-toolkit/p-9c34ee39.entry.js +0 -2
  188. package/dist/dso-toolkit/p-9c34ee39.entry.js.map +0 -1
  189. package/dist/dso-toolkit/p-a3f28ef2.entry.js +0 -2
  190. package/dist/dso-toolkit/p-b36ab83a.entry.js +0 -2
  191. package/dist/dso-toolkit/p-e348d48b.entry.js +0 -2
  192. package/dist/dso-toolkit/p-eb7275e9.entry.js +0 -2
  193. package/dist/dso-toolkit/p-fbb226aa.js +0 -6
  194. package/dist/dso-toolkit/p-fbb226aa.js.map +0 -1
  195. package/dist/esm/focus-trap.esm-d8deb1f0.js.map +0 -1
  196. package/dist/esm/index.esm-7e16e884.js +0 -572
  197. package/dist/esm/index.esm-7e16e884.js.map +0 -1
@@ -6,6 +6,7 @@ export class Card {
6
6
  this.clickable = true;
7
7
  this.imageShape = "normal";
8
8
  this.href = undefined;
9
+ this.mode = undefined;
9
10
  }
10
11
  connectedCallback() {
11
12
  this.mutationObserver = new MutationObserver(() => forceUpdate(this.host));
@@ -49,7 +50,9 @@ export class Card {
49
50
  render() {
50
51
  const isSelectable = this.selectableSlottedElement !== null;
51
52
  const hasImage = this.imageSlottedElement !== null;
52
- return (h(Host, { onClick: (e) => this.clickEventHandler(e), "is-selectable": isSelectable, "has-image": hasImage }, h("div", { class: "dso-card-selectable", hidden: !isSelectable }, h("slot", { name: "selectable" })), h("div", { class: "dso-card-image", hidden: !hasImage }, h("slot", { name: "image" })), h("div", { class: "dso-card-heading" }, this.headingSlottedElement instanceof HTMLAnchorElement || !this.href ? (h("slot", { name: "heading" })) : (h("a", { href: this.href, class: "heading-anchor" }, h("slot", { name: "heading" }), h("dso-icon", { icon: "chevron-right" }))), this.interactionsSlottedElement !== null && h("slot", { name: "interactions" })), h("div", { class: "dso-card-content" }, h("slot", { name: "content" }))));
53
+ return (h(Host, { onClick: (e) => this.clickEventHandler(e), "is-selectable": isSelectable, "has-image": hasImage }, h("div", { class: "dso-card-selectable", hidden: !isSelectable }, h("slot", { name: "selectable" })), h("div", { class: "dso-card-image", hidden: !hasImage }, h("slot", { name: "image" })), h("div", { class: "dso-card-heading" }, this.headingSlottedElement instanceof HTMLAnchorElement || !this.href ? (h("slot", { name: "heading" })) : (((!this.mode || !["download", "extern"].includes(this.mode)) && (h("a", { href: this.href, class: "heading-anchor" }, h("slot", { name: "heading" }), h("dso-icon", { icon: "chevron-right" })))) ||
54
+ (this.mode === "extern" && (h("a", { href: this.href, class: "heading-anchor", target: "_blank", rel: "noopener noreferrer" }, h("slot", { name: "heading" }), h("dso-icon", { icon: "external-link" }), h("span", { class: "sr-only" }, "(Opent andere website in nieuw tabblad)")))) ||
55
+ (this.mode === "download" && (h("a", { href: this.href, class: "heading-anchor" }, h("slot", { name: "heading" }), h("dso-icon", { icon: "download" }))))), this.interactionsSlottedElement !== null && h("slot", { name: "interactions" })), h("div", { class: "dso-card-content" }, h("slot", { name: "content" }))));
53
56
  }
54
57
  static get is() { return "dso-card"; }
55
58
  static get encapsulation() { return "shadow"; }
@@ -126,6 +129,23 @@ export class Card {
126
129
  },
127
130
  "attribute": "href",
128
131
  "reflect": true
132
+ },
133
+ "mode": {
134
+ "type": "string",
135
+ "mutable": false,
136
+ "complexType": {
137
+ "original": "string",
138
+ "resolved": "string | undefined",
139
+ "references": {}
140
+ },
141
+ "required": false,
142
+ "optional": true,
143
+ "docs": {
144
+ "tags": [],
145
+ "text": "Display the link as an external link or a download link\r\n - \"download\"\r\n - \"extern\""
146
+ },
147
+ "attribute": "mode",
148
+ "reflect": true
129
149
  }
130
150
  };
131
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../../src/components/card/card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,SAAS,EAAsB,OAAO,EAAE,KAAK,EAAgB,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAShE,MAAM,OAAO,IAAI;;qBAUH,IAAI;sBAQS,QAAQ;;;EAgBjC,iBAAiB;IACf,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3E,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;EAClF,CAAC;EAED,oBAAoB;;IAClB,MAAA,IAAI,CAAC,gBAAgB,0CAAE,UAAU,EAAE,CAAC;IAEpC,OAAO,IAAI,CAAC,gBAAgB,CAAC;EAC/B,CAAC;EAEO,iBAAiB,CAAC,CAAa;IACrC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MACzE,OAAO;KACR;IAED,IAAI,OAAO,GAAuB,CAAC,CAAC,MAAM,CAAC;IAE3C,OAAO,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE;MAChD,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,IAAI,EAAE;QACrD,OAAO;OACR;MAED,IAAI,OAAO,CAAC,UAAU,YAAY,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,YAAY,WAAW,EAAE;QAC9F,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;OACnC;WAAM;QACL,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;OACjC;KACF;IAED,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC7F,CAAC;EAED,IAAI,wBAAwB;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;EACxD,CAAC;EAED,IAAI,mBAAmB;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;EACnD,CAAC;EAED,IAAI,qBAAqB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;EACrD,CAAC;EAED,IAAI,0BAA0B;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;EAC1D,CAAC;EAED,MAAM;IACJ,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC;IAEnD,OAAO,CACL,EAAC,IAAI,IAAC,OAAO,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAiB,YAAY,eAAa,QAAQ;MAC3G,WAAK,KAAK,EAAC,qBAAqB,EAAC,MAAM,EAAE,CAAC,YAAY;QACpD,YAAM,IAAI,EAAC,YAAY,GAAG,CACtB;MACN,WAAK,KAAK,EAAC,gBAAgB,EAAC,MAAM,EAAE,CAAC,QAAQ;QAC3C,YAAM,IAAI,EAAC,OAAO,GAAG,CACjB;MACN,WAAK,KAAK,EAAC,kBAAkB;QAC1B,IAAI,CAAC,qBAAqB,YAAY,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACvE,YAAM,IAAI,EAAC,SAAS,GAAG,CACxB,CAAC,CAAC,CAAC,CACF,SAAG,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAC,gBAAgB;UACxC,YAAM,IAAI,EAAC,SAAS,GAAG;UACvB,gBAAU,IAAI,EAAC,eAAe,GAAY,CACxC,CACL;QACA,IAAI,CAAC,0BAA0B,KAAK,IAAI,IAAI,YAAM,IAAI,EAAC,cAAc,GAAG,CACrE;MACN,WAAK,KAAK,EAAC,kBAAkB;QAC3B,YAAM,IAAI,EAAC,SAAS,GAAG,CACnB,CACD,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { h, Component, ComponentInterface, Element, Event, EventEmitter, Host, Prop, forceUpdate } from \"@stencil/core\";\r\n\r\nimport { isInteractiveElement } from \"../../utils/is-interactive-element\";\r\nimport { isModifiedEvent } from \"../../utils/is-modified-event\";\r\n\r\nimport { DsoCardClickedEvent, ImageShape } from \"./card.interfaces\";\r\n\r\n@Component({\r\n tag: \"dso-card\",\r\n styleUrl: \"card.scss\",\r\n shadow: true,\r\n})\r\nexport class Card implements ComponentInterface {\r\n @Element()\r\n host!: HTMLDsoCardElement;\r\n\r\n /**\r\n * Whether or not the Card is clickable. This is NOT a boolean attribute. Set to \"false\" to make the Card non-clickable.\r\n *\r\n * @deprecated Use `href` instead and `<ELEMENT_TYPE slot=\"heading\">` should NOT be of element type `a` (anchor).\r\n */\r\n @Prop({ reflect: true })\r\n clickable = true;\r\n\r\n /**\r\n * Presentation of image in header.\r\n * - \"normal\" (\"24 x 24\").\r\n * - \"wide\" (\"30 x 26\")\r\n */\r\n @Prop({ reflect: true })\r\n imageShape: ImageShape = \"normal\";\r\n\r\n /**\r\n * The URL to which the Card heading links.\r\n */\r\n @Prop({ reflect: true })\r\n href?: string;\r\n\r\n /**\r\n * Emitted when the Card is clickable and the user clicked the Card.\r\n */\r\n @Event()\r\n dsoCardClicked!: EventEmitter<DsoCardClickedEvent>;\r\n\r\n private mutationObserver?: MutationObserver;\r\n\r\n connectedCallback(): void {\r\n this.mutationObserver = new MutationObserver(() => forceUpdate(this.host));\r\n\r\n this.mutationObserver.observe(this.host, { attributes: true, childList: true });\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.mutationObserver?.disconnect();\r\n\r\n delete this.mutationObserver;\r\n }\r\n\r\n private clickEventHandler(e: MouseEvent) {\r\n if (!(e.target instanceof HTMLElement) || (!this.clickable && !this.href)) {\r\n return;\r\n }\r\n\r\n let element: HTMLElement | null = e.target;\r\n\r\n while (element !== this.host && element !== null) {\r\n if (isInteractiveElement(element) || element === null) {\r\n return;\r\n }\r\n\r\n if (element.parentNode instanceof ShadowRoot && element.parentNode.host instanceof HTMLElement) {\r\n element = element.parentNode.host;\r\n } else {\r\n element = element.parentElement;\r\n }\r\n }\r\n\r\n return this.dsoCardClicked.emit({ originalEvent: e, isModifiedEvent: isModifiedEvent(e) });\r\n }\r\n\r\n get selectableSlottedElement() {\r\n return this.host.querySelector(\"[slot='selectable']\");\r\n }\r\n\r\n get imageSlottedElement() {\r\n return this.host.querySelector(\"[slot='image']\");\r\n }\r\n\r\n get headingSlottedElement() {\r\n return this.host.querySelector(\"[slot='heading']\");\r\n }\r\n\r\n get interactionsSlottedElement() {\r\n return this.host.querySelector(\"[slot='interactions']\");\r\n }\r\n\r\n render() {\r\n const isSelectable = this.selectableSlottedElement !== null;\r\n const hasImage = this.imageSlottedElement !== null;\r\n\r\n return (\r\n <Host onClick={(e: MouseEvent) => this.clickEventHandler(e)} is-selectable={isSelectable} has-image={hasImage}>\r\n <div class=\"dso-card-selectable\" hidden={!isSelectable}>\r\n <slot name=\"selectable\" />\r\n </div>\r\n <div class=\"dso-card-image\" hidden={!hasImage}>\r\n <slot name=\"image\" />\r\n </div>\r\n <div class=\"dso-card-heading\">\r\n {this.headingSlottedElement instanceof HTMLAnchorElement || !this.href ? (\r\n <slot name=\"heading\" />\r\n ) : (\r\n <a href={this.href} class=\"heading-anchor\">\r\n <slot name=\"heading\" />\r\n <dso-icon icon=\"chevron-right\"></dso-icon>\r\n </a>\r\n )}\r\n {this.interactionsSlottedElement !== null && <slot name=\"interactions\" />}\r\n </div>\r\n <div class=\"dso-card-content\">\r\n <slot name=\"content\" />\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../../src/components/card/card.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h, Component, ComponentInterface, Element, Event, EventEmitter, Host, Prop, forceUpdate } from \"@stencil/core\";\r\n\r\nimport { isInteractiveElement } from \"../../utils/is-interactive-element\";\r\nimport { isModifiedEvent } from \"../../utils/is-modified-event\";\r\n\r\nimport { DsoCardClickedEvent, ImageShape } from \"./card.interfaces\";\r\n\r\n@Component({\r\n tag: \"dso-card\",\r\n styleUrl: \"card.scss\",\r\n shadow: true,\r\n})\r\nexport class Card implements ComponentInterface {\r\n @Element()\r\n host!: HTMLDsoCardElement;\r\n\r\n /**\r\n * Whether or not the Card is clickable. This is NOT a boolean attribute. Set to \"false\" to make the Card non-clickable.\r\n *\r\n * @deprecated Use `href` instead and `<ELEMENT_TYPE slot=\"heading\">` should NOT be of element type `a` (anchor).\r\n */\r\n @Prop({ reflect: true })\r\n clickable = true;\r\n\r\n /**\r\n * Presentation of image in header.\r\n * - \"normal\" (\"24 x 24\").\r\n * - \"wide\" (\"30 x 26\")\r\n */\r\n @Prop({ reflect: true })\r\n imageShape: ImageShape = \"normal\";\r\n\r\n /**\r\n * The URL to which the Card heading links.\r\n */\r\n @Prop({ reflect: true })\r\n href?: string;\r\n\r\n /**\r\n * Display the link as an external link or a download link\r\n * - \"download\"\r\n * - \"extern\"\r\n */\r\n @Prop({ reflect: true })\r\n mode?: string;\r\n\r\n /**\r\n * Emitted when the Card is clickable and the user clicked the Card.\r\n */\r\n @Event()\r\n dsoCardClicked!: EventEmitter<DsoCardClickedEvent>;\r\n\r\n private mutationObserver?: MutationObserver;\r\n\r\n connectedCallback(): void {\r\n this.mutationObserver = new MutationObserver(() => forceUpdate(this.host));\r\n\r\n this.mutationObserver.observe(this.host, { attributes: true, childList: true });\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.mutationObserver?.disconnect();\r\n\r\n delete this.mutationObserver;\r\n }\r\n\r\n private clickEventHandler(e: MouseEvent) {\r\n if (!(e.target instanceof HTMLElement) || (!this.clickable && !this.href)) {\r\n return;\r\n }\r\n\r\n let element: HTMLElement | null = e.target;\r\n\r\n while (element !== this.host && element !== null) {\r\n if (isInteractiveElement(element) || element === null) {\r\n return;\r\n }\r\n\r\n if (element.parentNode instanceof ShadowRoot && element.parentNode.host instanceof HTMLElement) {\r\n element = element.parentNode.host;\r\n } else {\r\n element = element.parentElement;\r\n }\r\n }\r\n\r\n return this.dsoCardClicked.emit({ originalEvent: e, isModifiedEvent: isModifiedEvent(e) });\r\n }\r\n\r\n get selectableSlottedElement() {\r\n return this.host.querySelector(\"[slot='selectable']\");\r\n }\r\n\r\n get imageSlottedElement() {\r\n return this.host.querySelector(\"[slot='image']\");\r\n }\r\n\r\n get headingSlottedElement() {\r\n return this.host.querySelector(\"[slot='heading']\");\r\n }\r\n\r\n get interactionsSlottedElement() {\r\n return this.host.querySelector(\"[slot='interactions']\");\r\n }\r\n\r\n render() {\r\n const isSelectable = this.selectableSlottedElement !== null;\r\n const hasImage = this.imageSlottedElement !== null;\r\n\r\n return (\r\n <Host onClick={(e: MouseEvent) => this.clickEventHandler(e)} is-selectable={isSelectable} has-image={hasImage}>\r\n <div class=\"dso-card-selectable\" hidden={!isSelectable}>\r\n <slot name=\"selectable\" />\r\n </div>\r\n <div class=\"dso-card-image\" hidden={!hasImage}>\r\n <slot name=\"image\" />\r\n </div>\r\n <div class=\"dso-card-heading\">\r\n {this.headingSlottedElement instanceof HTMLAnchorElement || !this.href ? (\r\n <slot name=\"heading\" />\r\n ) : (\r\n ((!this.mode || ![\"download\", \"extern\"].includes(this.mode)) && (\r\n <a href={this.href} class=\"heading-anchor\">\r\n <slot name=\"heading\" />\r\n <dso-icon icon=\"chevron-right\"></dso-icon>\r\n </a>\r\n )) ||\r\n (this.mode === \"extern\" && (\r\n <a href={this.href} class=\"heading-anchor\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n <slot name=\"heading\" />\r\n <dso-icon icon=\"external-link\"></dso-icon>\r\n <span class=\"sr-only\">(Opent andere website in nieuw tabblad)</span>\r\n </a>\r\n )) ||\r\n (this.mode === \"download\" && (\r\n <a href={this.href} class=\"heading-anchor\">\r\n <slot name=\"heading\" />\r\n <dso-icon icon=\"download\"></dso-icon>\r\n </a>\r\n ))\r\n )}\r\n {this.interactionsSlottedElement !== null && <slot name=\"interactions\" />}\r\n </div>\r\n <div class=\"dso-card-content\">\r\n <slot name=\"content\" />\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -695,24 +695,56 @@ a.dso-tertiary, a.dso-tertiary:visited {
695
695
 
696
696
  :host([wijzigactie=verwijderContainer]) .heading-container,
697
697
  :host(:where([wijzigactie=verwijder])) {
698
+ --link-color: currentColor;
699
+ --link-hover-color: currentColor;
700
+ --link-visited-color: currentColor;
698
701
  background-color: #f5d8dc;
699
- color: #000;
702
+ border-color: #f5d8dc;
703
+ color: #191919;
700
704
  text-decoration: line-through;
701
705
  }
702
- :host([wijzigactie=verwijderContainer]) .heading-container a,
703
- :host(:where([wijzigactie=verwijder])) a {
704
- color: #000;
706
+ :host([wijzigactie=verwijderContainer]) .heading-container a:is(.download, .download:hover, .download:focus-visible),
707
+ :host(:where([wijzigactie=verwijder])) a:is(.download, .download:hover, .download:focus-visible) {
708
+ background-image: url("./dso-icons.svg#img-download-zwart");
709
+ }
710
+ :host([wijzigactie=verwijderContainer]) .heading-container a:is(.extern, .extern:hover, .extern:focus-visible),
711
+ :host(:where([wijzigactie=verwijder])) a:is(.extern, .extern:hover, .extern:focus-visible) {
712
+ background-image: url("./dso-icons.svg#img-external-link-zwart");
713
+ }
714
+ :host([wijzigactie=verwijderContainer]) .heading-container a:is([href^="tel:"], [href^="tel:"]:hover, [href^="tel:"]:focus-visible),
715
+ :host(:where([wijzigactie=verwijder])) a:is([href^="tel:"], [href^="tel:"]:hover, [href^="tel:"]:focus-visible) {
716
+ background-image: url("./dso-icons.svg#img-call-zwart");
717
+ }
718
+ :host([wijzigactie=verwijderContainer]) .heading-container a:is([href^="mailto:"], [href^="mailto:"]:hover, [href^="mailto:"]:focus-visible),
719
+ :host(:where([wijzigactie=verwijder])) a:is([href^="mailto:"], [href^="mailto:"]:hover, [href^="mailto:"]:focus-visible) {
720
+ background-image: url("./dso-icons.svg#img-email-zwart");
705
721
  }
706
722
 
707
723
  :host([wijzigactie=nieuweContainer]) .heading-container,
708
724
  :host([wijzigactie=voegtoe]) {
725
+ --link-color: currentColor;
726
+ --link-hover-color: currentColor;
727
+ --link-visited-color: currentColor;
709
728
  background-color: #e4f1d4;
729
+ border-color: #e4f1d4;
730
+ color: #191919;
710
731
  box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.25);
711
- color: #000;
712
732
  }
713
- :host([wijzigactie=nieuweContainer]) .heading-container a,
714
- :host([wijzigactie=voegtoe]) a {
715
- color: #000;
733
+ :host([wijzigactie=nieuweContainer]) .heading-container a:is(.download, .download:hover, .download:focus-visible),
734
+ :host([wijzigactie=voegtoe]) a:is(.download, .download:hover, .download:focus-visible) {
735
+ background-image: url("./dso-icons.svg#img-download-zwart");
736
+ }
737
+ :host([wijzigactie=nieuweContainer]) .heading-container a:is(.extern, .extern:hover, .extern:focus-visible),
738
+ :host([wijzigactie=voegtoe]) a:is(.extern, .extern:hover, .extern:focus-visible) {
739
+ background-image: url("./dso-icons.svg#img-external-link-zwart");
740
+ }
741
+ :host([wijzigactie=nieuweContainer]) .heading-container a:is([href^="tel:"], [href^="tel:"]:hover, [href^="tel:"]:focus-visible),
742
+ :host([wijzigactie=voegtoe]) a:is([href^="tel:"], [href^="tel:"]:hover, [href^="tel:"]:focus-visible) {
743
+ background-image: url("./dso-icons.svg#img-call-zwart");
744
+ }
745
+ :host([wijzigactie=nieuweContainer]) .heading-container a:is([href^="mailto:"], [href^="mailto:"]:hover, [href^="mailto:"]:focus-visible),
746
+ :host([wijzigactie=voegtoe]) a:is([href^="mailto:"], [href^="mailto:"]:hover, [href^="mailto:"]:focus-visible) {
747
+ background-image: url("./dso-icons.svg#img-email-zwart");
716
748
  }
717
749
 
718
750
  :host([filtered]) {
@@ -765,7 +797,7 @@ a.dso-tertiary, a.dso-tertiary:visited {
765
797
  :host(:not([not-collapsible])) .heading-element {
766
798
  cursor: pointer;
767
799
  }
768
- :host(:not([not-collapsible])) .heading-element:hover, :host(:not([not-collapsible])) .heading-element:focus {
800
+ :host(:not([not-collapsible])) .heading-element:hover, :host(:not([not-collapsible])) .heading-element:focus-visible {
769
801
  color: var(--link-hover-color);
770
802
  text-decoration: underline;
771
803
  }
@@ -3,13 +3,9 @@ import { h, Host } from "@stencil/core";
3
3
  import { tabbable } from "tabbable";
4
4
  import { v4 as uuidv4 } from "uuid";
5
5
  import { hasOverflow } from "../../utils/has-overflow";
6
+ import { createFocusTrap } from "focus-trap";
6
7
  export class DropdownMenu {
7
8
  constructor() {
8
- this.focusOutListener = (event) => {
9
- if (!this.tabbables.includes(event.relatedTarget)) {
10
- this.open = false;
11
- }
12
- };
13
9
  this.keyDownListener = (event) => {
14
10
  if (event.defaultPrevented) {
15
11
  return;
@@ -70,6 +66,32 @@ export class DropdownMenu {
70
66
  watchStrategy() {
71
67
  this.setStrategy();
72
68
  }
69
+ createTrap() {
70
+ var _a, _b;
71
+ this.trap = createFocusTrap(this.host, {
72
+ clickOutsideDeactivates: () => {
73
+ var _a;
74
+ this.open = false;
75
+ (_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
76
+ delete this.trap;
77
+ return true;
78
+ },
79
+ escapeDeactivates: (event) => {
80
+ var _a;
81
+ if (event instanceof KeyboardEvent) {
82
+ this.open = false;
83
+ (_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
84
+ delete this.trap;
85
+ }
86
+ return true;
87
+ },
88
+ tabbableOptions: {
89
+ getShadowRoot: true,
90
+ },
91
+ setReturnFocus: (_a = this.button) !== null && _a !== void 0 ? _a : false,
92
+ initialFocus: (_b = this.button) !== null && _b !== void 0 ? _b : false,
93
+ }).activate();
94
+ }
73
95
  setStrategy() {
74
96
  if (!this.popper) {
75
97
  return;
@@ -153,10 +175,15 @@ export class DropdownMenu {
153
175
  });
154
176
  }
155
177
  componentDidRender() {
156
- var _a;
178
+ var _a, _b;
157
179
  this.setStrategy();
158
180
  if (this.open) {
159
181
  (_a = this.popper) === null || _a === void 0 ? void 0 : _a.update();
182
+ this.createTrap();
183
+ }
184
+ else {
185
+ (_b = this.trap) === null || _b === void 0 ? void 0 : _b.deactivate();
186
+ delete this.trap;
160
187
  }
161
188
  for (const li of Array.from(this.host.getElementsByTagName("li"))) {
162
189
  for (const tab of tabbable(li)) {
@@ -206,7 +233,7 @@ export class DropdownMenu {
206
233
  (_a = tabs[nextIndex]) === null || _a === void 0 ? void 0 : _a.focus();
207
234
  }
208
235
  render() {
209
- return (h(Host, { onFocusout: this.focusOutListener, tabindex: this.open ? "-1" : undefined }, h("slot", { name: "toggle" }), h("div", { hidden: !this.open }, h("slot", null))));
236
+ return (h(Host, { tabindex: this.open ? "-1" : undefined }, h("slot", { name: "toggle" }), h("div", { hidden: !this.open }, h("slot", null))));
210
237
  }
211
238
  static get is() { return "dso-dropdown-menu"; }
212
239
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../../../src/components/dropdown-menu/dropdown-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { createPopper, Placement, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { h, Component, Element, Host, Prop, Watch } from \"@stencil/core\";\r\nimport { FocusableElement, tabbable } from \"tabbable\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport { hasOverflow } from \"../../utils/has-overflow\";\r\n\r\n@Component({\r\n tag: \"dso-dropdown-menu\",\r\n styleUrl: \"dropdown-menu.scss\",\r\n shadow: true,\r\n})\r\nexport class DropdownMenu {\r\n /**\r\n * Whether the menu is open or closed.\r\n * This attribute is reflected and mutable.\r\n */\r\n @Prop({ reflect: true, mutable: true })\r\n open = false;\r\n\r\n /**\r\n * Alignment of the dropdown\r\n */\r\n @Prop()\r\n dropdownAlign: \"left\" | \"right\" = \"left\";\r\n\r\n /**\r\n * Space between button and dropdown options\r\n */\r\n @Prop()\r\n dropdownOptionsOffset = 2;\r\n\r\n /**\r\n * Whether the menu is checkable.\r\n */\r\n @Prop()\r\n checkable = false;\r\n\r\n /**\r\n * Selector for the element the dropdown options should not be overflowing.\r\n */\r\n @Prop()\r\n boundary?: string;\r\n\r\n /**\r\n * Force placement of dropdown.\r\n *\r\n * This property overrides `dropdownAlign`.\r\n */\r\n @Prop()\r\n placement?: Placement;\r\n\r\n /**\r\n * Set position strategy of dropdown options\r\n */\r\n @Prop()\r\n strategy: \"auto\" | \"absolute\" | \"fixed\" = \"auto\";\r\n\r\n @Watch(\"placement\")\r\n @Watch(\"dropdownAlign\")\r\n watchPosition() {\r\n if (!this.popper) {\r\n return;\r\n }\r\n\r\n this.popper.setOptions({\r\n placement: this.placement || (this.dropdownAlign === \"right\" ? \"bottom-end\" : \"bottom-start\"),\r\n });\r\n }\r\n\r\n @Watch(\"dropdownOptionsOffset\")\r\n watchOptionsOffset() {\r\n this.popper?.setOptions({\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, this.dropdownOptionsOffset],\r\n },\r\n },\r\n ],\r\n });\r\n }\r\n\r\n @Watch(\"strategy\")\r\n watchStrategy() {\r\n this.setStrategy();\r\n }\r\n\r\n private setStrategy() {\r\n if (!this.popper) {\r\n return;\r\n }\r\n\r\n if (this.strategy === \"absolute\" || this.strategy === \"fixed\") {\r\n this.popper.setOptions({\r\n strategy: this.strategy,\r\n });\r\n\r\n return;\r\n }\r\n\r\n let element: Element | null = this.host;\r\n\r\n const boundary = this.boundary || document;\r\n\r\n while (element && element.parentNode !== boundary) {\r\n element = element.parentNode instanceof ShadowRoot ? element.parentNode.host : element.parentElement;\r\n if (element !== null && hasOverflow(element)) {\r\n this.popper.setOptions({\r\n strategy: \"fixed\",\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n this.popper.setOptions({\r\n strategy: \"absolute\",\r\n });\r\n }\r\n\r\n @Element()\r\n host!: HTMLDsoDropdownMenuElement;\r\n\r\n private popper: PopperInstance | undefined;\r\n\r\n get button(): HTMLButtonElement {\r\n const button = this.host.querySelector('button[slot=\"toggle\"]');\r\n\r\n if (!(button instanceof HTMLButtonElement)) {\r\n throw new ReferenceError(\"Mandatory toggle button not found\");\r\n }\r\n\r\n return button;\r\n }\r\n\r\n get tabbables(): FocusableElement[] {\r\n return tabbable(this.host).filter((e) => e !== this.button);\r\n }\r\n\r\n componentDidLoad() {\r\n this.button.setAttribute(\"aria-haspopup\", \"menu\");\r\n this.button.setAttribute(\"aria-expanded\", \"false\");\r\n if (!this.button.id) {\r\n this.button.id = uuidv4();\r\n }\r\n\r\n this.button.addEventListener(\"click\", () => {\r\n this.open = !this.open;\r\n });\r\n\r\n const options = this.host.querySelector(\".dso-dropdown-options\");\r\n if (!options) {\r\n throw new ReferenceError(\"Dropdown options not found\");\r\n }\r\n\r\n options.setAttribute(\"role\", \"menu\");\r\n options.setAttribute(\"aria-labelledby\", this.button.id);\r\n\r\n for (const ul of Array.from(this.host.getElementsByTagName(\"ul\"))) {\r\n ul.setAttribute(\"role\", \"group\");\r\n for (const li of Array.from(ul.getElementsByTagName(\"li\"))) {\r\n li.setAttribute(\"role\", \"none\");\r\n }\r\n }\r\n\r\n if (this.popper) {\r\n return;\r\n }\r\n\r\n const dropdownOptionsElement = this.host.querySelector(\".dso-dropdown-options\");\r\n\r\n if (!(dropdownOptionsElement instanceof HTMLElement)) {\r\n throw new Error(\"dropdown options element is not instanceof HTMLElement\");\r\n }\r\n\r\n this.popper = createPopper(this.button, dropdownOptionsElement, {\r\n placement: this.placement || (this.dropdownAlign === \"right\" ? \"bottom-end\" : \"bottom-start\"),\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, this.dropdownOptionsOffset],\r\n },\r\n },\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: this.boundary ? document.querySelector(this.boundary) : null,\r\n },\r\n enabled: this.boundary !== undefined,\r\n },\r\n ],\r\n });\r\n }\r\n\r\n componentDidRender() {\r\n this.setStrategy();\r\n if (this.open) {\r\n this.popper?.update();\r\n }\r\n\r\n for (const li of Array.from(this.host.getElementsByTagName(\"li\"))) {\r\n for (const tab of tabbable(li)) {\r\n tab.setAttribute(\"role\", this.checkable ? \"menuitemradio\" : \"menuitem\");\r\n\r\n if (this.checkable) {\r\n tab.setAttribute(\"aria-checked\", li.classList.contains(\"dso-checked\").toString());\r\n }\r\n }\r\n }\r\n\r\n this.host.removeEventListener(\"keydown\", this.keyDownListener);\r\n this.button.setAttribute(\"aria-expanded\", this.open ? \"true\" : \"false\");\r\n if (this.open) {\r\n this.host.addEventListener(\"keydown\", this.keyDownListener);\r\n }\r\n\r\n this.tabbables.forEach((focusableElement) => {\r\n focusableElement.removeEventListener(\"click\", this.escape);\r\n if (this.open) {\r\n focusableElement.addEventListener(\"click\", this.escape);\r\n }\r\n });\r\n }\r\n\r\n disconnectedCallback() {\r\n this.popper?.destroy();\r\n }\r\n\r\n private focusOutListener = (event: FocusEvent) => {\r\n if (!this.tabbables.includes(event.relatedTarget as FocusableElement)) {\r\n this.open = false;\r\n }\r\n };\r\n\r\n private keyDownListener = (event: KeyboardEvent) => {\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.tabInPopup(1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n this.tabInPopup(-1);\r\n break;\r\n\r\n case \"Escape\":\r\n this.escape();\r\n break;\r\n\r\n case \" \":\r\n if (event.target instanceof HTMLElement) {\r\n event.target.click();\r\n }\r\n\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n };\r\n\r\n private getActiveElement(root: Document | ShadowRoot = document): Element | null {\r\n const activeEl = root.activeElement;\r\n\r\n if (!activeEl) {\r\n return null;\r\n }\r\n\r\n if (activeEl.shadowRoot) {\r\n return this.getActiveElement(activeEl.shadowRoot);\r\n }\r\n\r\n return activeEl;\r\n }\r\n\r\n private tabInPopup(direction: number) {\r\n const tabs = this.tabbables;\r\n const currentIndex = tabs.findIndex((e) => e === this.getActiveElement());\r\n\r\n let nextIndex = currentIndex + direction;\r\n if (nextIndex >= tabs.length) {\r\n nextIndex = 0;\r\n } else if (nextIndex < 0) {\r\n nextIndex = tabs.length - 1;\r\n }\r\n\r\n tabs[nextIndex]?.focus();\r\n }\r\n\r\n private escape = () => {\r\n this.button.focus();\r\n this.open = false;\r\n };\r\n\r\n render() {\r\n return (\r\n <Host onFocusout={this.focusOutListener} tabindex={this.open ? \"-1\" : undefined}>\r\n <slot name=\"toggle\" />\r\n <div hidden={!this.open}>\r\n <slot />\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../../../src/components/dropdown-menu/dropdown-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { createPopper, Placement, Instance as PopperInstance } from \"@popperjs/core\";\r\nimport { h, Component, Element, Host, Prop, Watch } from \"@stencil/core\";\r\nimport { FocusableElement, tabbable } from \"tabbable\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport { hasOverflow } from \"../../utils/has-overflow\";\r\nimport { createFocusTrap, FocusTrap } from \"focus-trap\";\r\n\r\n@Component({\r\n tag: \"dso-dropdown-menu\",\r\n styleUrl: \"dropdown-menu.scss\",\r\n shadow: true,\r\n})\r\nexport class DropdownMenu {\r\n private trap?: FocusTrap;\r\n /**\r\n * Whether the menu is open or closed.\r\n * This attribute is reflected and mutable.\r\n */\r\n @Prop({ reflect: true, mutable: true })\r\n open = false;\r\n\r\n /**\r\n * Alignment of the dropdown\r\n */\r\n @Prop()\r\n dropdownAlign: \"left\" | \"right\" = \"left\";\r\n\r\n /**\r\n * Space between button and dropdown options\r\n */\r\n @Prop()\r\n dropdownOptionsOffset = 2;\r\n\r\n /**\r\n * Whether the menu is checkable.\r\n */\r\n @Prop()\r\n checkable = false;\r\n\r\n /**\r\n * Selector for the element the dropdown options should not be overflowing.\r\n */\r\n @Prop()\r\n boundary?: string;\r\n\r\n /**\r\n * Force placement of dropdown.\r\n *\r\n * This property overrides `dropdownAlign`.\r\n */\r\n @Prop()\r\n placement?: Placement;\r\n\r\n /**\r\n * Set position strategy of dropdown options\r\n */\r\n @Prop()\r\n strategy: \"auto\" | \"absolute\" | \"fixed\" = \"auto\";\r\n\r\n @Watch(\"placement\")\r\n @Watch(\"dropdownAlign\")\r\n watchPosition() {\r\n if (!this.popper) {\r\n return;\r\n }\r\n\r\n this.popper.setOptions({\r\n placement: this.placement || (this.dropdownAlign === \"right\" ? \"bottom-end\" : \"bottom-start\"),\r\n });\r\n }\r\n\r\n @Watch(\"dropdownOptionsOffset\")\r\n watchOptionsOffset() {\r\n this.popper?.setOptions({\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, this.dropdownOptionsOffset],\r\n },\r\n },\r\n ],\r\n });\r\n }\r\n\r\n @Watch(\"strategy\")\r\n watchStrategy() {\r\n this.setStrategy();\r\n }\r\n\r\n private createTrap() {\r\n this.trap = createFocusTrap(this.host, {\r\n clickOutsideDeactivates: () => {\r\n this.open = false;\r\n this.trap?.deactivate();\r\n delete this.trap;\r\n\r\n return true;\r\n },\r\n escapeDeactivates: (event) => {\r\n if (event instanceof KeyboardEvent) {\r\n this.open = false;\r\n this.trap?.deactivate();\r\n delete this.trap;\r\n }\r\n\r\n return true;\r\n },\r\n tabbableOptions: {\r\n getShadowRoot: true,\r\n },\r\n setReturnFocus: this.button ?? false,\r\n initialFocus: this.button ?? false,\r\n }).activate();\r\n }\r\n\r\n private setStrategy() {\r\n if (!this.popper) {\r\n return;\r\n }\r\n\r\n if (this.strategy === \"absolute\" || this.strategy === \"fixed\") {\r\n this.popper.setOptions({\r\n strategy: this.strategy,\r\n });\r\n\r\n return;\r\n }\r\n\r\n let element: Element | null = this.host;\r\n\r\n const boundary = this.boundary || document;\r\n\r\n while (element && element.parentNode !== boundary) {\r\n element = element.parentNode instanceof ShadowRoot ? element.parentNode.host : element.parentElement;\r\n if (element !== null && hasOverflow(element)) {\r\n this.popper.setOptions({\r\n strategy: \"fixed\",\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n this.popper.setOptions({\r\n strategy: \"absolute\",\r\n });\r\n }\r\n\r\n @Element()\r\n host!: HTMLDsoDropdownMenuElement;\r\n\r\n private popper: PopperInstance | undefined;\r\n\r\n get button(): HTMLButtonElement {\r\n const button = this.host.querySelector('button[slot=\"toggle\"]');\r\n\r\n if (!(button instanceof HTMLButtonElement)) {\r\n throw new ReferenceError(\"Mandatory toggle button not found\");\r\n }\r\n\r\n return button;\r\n }\r\n\r\n get tabbables(): FocusableElement[] {\r\n return tabbable(this.host).filter((e) => e !== this.button);\r\n }\r\n\r\n componentDidLoad() {\r\n this.button.setAttribute(\"aria-haspopup\", \"menu\");\r\n this.button.setAttribute(\"aria-expanded\", \"false\");\r\n if (!this.button.id) {\r\n this.button.id = uuidv4();\r\n }\r\n\r\n this.button.addEventListener(\"click\", () => {\r\n this.open = !this.open;\r\n });\r\n\r\n const options = this.host.querySelector(\".dso-dropdown-options\");\r\n if (!options) {\r\n throw new ReferenceError(\"Dropdown options not found\");\r\n }\r\n\r\n options.setAttribute(\"role\", \"menu\");\r\n options.setAttribute(\"aria-labelledby\", this.button.id);\r\n\r\n for (const ul of Array.from(this.host.getElementsByTagName(\"ul\"))) {\r\n ul.setAttribute(\"role\", \"group\");\r\n for (const li of Array.from(ul.getElementsByTagName(\"li\"))) {\r\n li.setAttribute(\"role\", \"none\");\r\n }\r\n }\r\n\r\n if (this.popper) {\r\n return;\r\n }\r\n\r\n const dropdownOptionsElement = this.host.querySelector(\".dso-dropdown-options\");\r\n\r\n if (!(dropdownOptionsElement instanceof HTMLElement)) {\r\n throw new Error(\"dropdown options element is not instanceof HTMLElement\");\r\n }\r\n\r\n this.popper = createPopper(this.button, dropdownOptionsElement, {\r\n placement: this.placement || (this.dropdownAlign === \"right\" ? \"bottom-end\" : \"bottom-start\"),\r\n modifiers: [\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, this.dropdownOptionsOffset],\r\n },\r\n },\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: this.boundary ? document.querySelector(this.boundary) : null,\r\n },\r\n enabled: this.boundary !== undefined,\r\n },\r\n ],\r\n });\r\n }\r\n\r\n componentDidRender() {\r\n this.setStrategy();\r\n if (this.open) {\r\n this.popper?.update();\r\n this.createTrap();\r\n } else {\r\n this.trap?.deactivate();\r\n\r\n delete this.trap;\r\n }\r\n\r\n for (const li of Array.from(this.host.getElementsByTagName(\"li\"))) {\r\n for (const tab of tabbable(li)) {\r\n tab.setAttribute(\"role\", this.checkable ? \"menuitemradio\" : \"menuitem\");\r\n\r\n if (this.checkable) {\r\n tab.setAttribute(\"aria-checked\", li.classList.contains(\"dso-checked\").toString());\r\n }\r\n }\r\n }\r\n\r\n this.host.removeEventListener(\"keydown\", this.keyDownListener);\r\n this.button.setAttribute(\"aria-expanded\", this.open ? \"true\" : \"false\");\r\n if (this.open) {\r\n this.host.addEventListener(\"keydown\", this.keyDownListener);\r\n }\r\n\r\n this.tabbables.forEach((focusableElement) => {\r\n focusableElement.removeEventListener(\"click\", this.escape);\r\n if (this.open) {\r\n focusableElement.addEventListener(\"click\", this.escape);\r\n }\r\n });\r\n }\r\n\r\n disconnectedCallback() {\r\n this.popper?.destroy();\r\n }\r\n\r\n private keyDownListener = (event: KeyboardEvent) => {\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n this.tabInPopup(1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n this.tabInPopup(-1);\r\n break;\r\n\r\n case \"Escape\":\r\n this.escape();\r\n break;\r\n\r\n case \" \":\r\n if (event.target instanceof HTMLElement) {\r\n event.target.click();\r\n }\r\n\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n };\r\n\r\n private getActiveElement(root: Document | ShadowRoot = document): Element | null {\r\n const activeEl = root.activeElement;\r\n\r\n if (!activeEl) {\r\n return null;\r\n }\r\n\r\n if (activeEl.shadowRoot) {\r\n return this.getActiveElement(activeEl.shadowRoot);\r\n }\r\n\r\n return activeEl;\r\n }\r\n\r\n private tabInPopup(direction: number) {\r\n const tabs = this.tabbables;\r\n const currentIndex = tabs.findIndex((e) => e === this.getActiveElement());\r\n\r\n let nextIndex = currentIndex + direction;\r\n if (nextIndex >= tabs.length) {\r\n nextIndex = 0;\r\n } else if (nextIndex < 0) {\r\n nextIndex = tabs.length - 1;\r\n }\r\n\r\n tabs[nextIndex]?.focus();\r\n }\r\n\r\n private escape = () => {\r\n this.button.focus();\r\n this.open = false;\r\n };\r\n\r\n render() {\r\n return (\r\n <Host tabindex={this.open ? \"-1\" : undefined}>\r\n <slot name=\"toggle\" />\r\n <div hidden={!this.open}>\r\n <slot />\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -177,7 +177,7 @@ dso-dropdown-menu .dso-dropdown-options ul li + li {
177
177
  padding: 16px 0;
178
178
  white-space: nowrap;
179
179
  }
180
- .dso-nav.dso-nav-main > li > a:hover, .dso-nav.dso-nav-main > li > a:focus, .dso-nav.dso-nav-main > li > a:active {
180
+ .dso-nav.dso-nav-main > li > a:hover, .dso-nav.dso-nav-main > li > a:focus-visible, .dso-nav.dso-nav-main > li > a:active {
181
181
  text-decoration: underline;
182
182
  }
183
183
  .dso-nav.dso-nav-main dso-dropdown-menu .dso-dropdown-options {
@@ -1,59 +1,10 @@
1
- :host {
2
- display: block;
3
- container-type: inline-size;
4
- position: relative;
5
- z-index: 1;
6
- }
7
-
8
- :host-context(.row.dso-equal-heights) {
9
- height: 100%;
10
- min-height: auto;
11
- }
12
- :host-context(.row.dso-equal-heights) > .dso-highlight-box {
13
- min-height: auto;
14
- }
15
- :host-context(.row.dso-equal-heights) > .dso-highlight-box.dso-has-counter {
16
- height: calc(100% - 48px);
17
- }
18
- :host-context(.row.dso-equal-heights) > .dso-highlight-box:not(.dso-has-counter) {
19
- height: calc(100% - 16px);
20
- }
21
-
22
1
  *,
23
2
  *::after,
24
3
  *::before {
25
4
  box-sizing: border-box;
26
5
  }
27
6
 
28
- .dso-highlight-box {
29
- background-color: #f2f2f2;
30
- color: #000;
31
- margin-top: 16px;
32
- padding: 16px;
33
- margin-bottom: 24px;
34
- }
35
- .dso-highlight-box.dso-white {
36
- background-color: #fff;
37
- }
38
- .dso-highlight-box.dso-yellow {
39
- background-color: #f8f6cc;
40
- }
41
- .dso-highlight-box.dso-drop-shadow {
42
- box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
43
- }
44
- .dso-highlight-box.dso-border {
45
- background-color: #fff;
46
- border: 1px solid #ccc;
47
- padding: 15px;
48
- }
49
- .dso-highlight-box.dso-has-counter {
50
- margin-top: 48px;
51
- }
52
- .dso-highlight-box.dso-has-counter {
53
- padding-top: 2.5rem;
54
- position: relative;
55
- }
56
- .dso-highlight-box .dso-step-counter {
7
+ .dso-step-counter {
57
8
  background-color: #275937;
58
9
  border: 8px solid #79b929;
59
10
  border-radius: 50%;
@@ -69,11 +20,24 @@
69
20
  top: -1.5rem;
70
21
  width: 2rem;
71
22
  }
72
- .dso-highlight-box .dso-step-counter svg.di {
73
- height: 1.5rem;
74
- margin-top: 0.25rem;
75
- width: 1.5rem;
23
+
24
+ :host {
25
+ margin-top: 16px;
26
+ padding: 16px;
27
+ margin-bottom: 24px;
28
+ display: block;
29
+ container-type: inline-size;
30
+ position: relative;
31
+ z-index: 1;
76
32
  }
77
- .dso-highlight-box > dso-icon {
78
- vertical-align: text-top;
33
+
34
+ :host-context(.row.dso-equal-heights) {
35
+ height: 100%;
36
+ min-height: auto;
37
+ }
38
+ :host-context(.row.dso-equal-heights)[has-counter] {
39
+ height: calc(100% - 48px);
40
+ }
41
+ :host-context(.row.dso-equal-heights):not([has-counter]) {
42
+ height: calc(100% - 16px);
79
43
  }
@@ -1,5 +1,4 @@
1
- import { h } from "@stencil/core";
2
- import clsx from "clsx";
1
+ import { h, Host } from "@stencil/core";
3
2
  export class HighlightBox {
4
3
  constructor() {
5
4
  this.yellow = undefined;
@@ -11,14 +10,7 @@ export class HighlightBox {
11
10
  render() {
12
11
  var _a;
13
12
  const hasCounter = this.step || !!this.element.querySelector("[slot=icon]");
14
- const classes = clsx("dso-highlight-box", {
15
- "dso-yellow": this.yellow,
16
- "dso-border": this.border,
17
- "dso-white": this.white,
18
- "dso-drop-shadow": this.dropShadow,
19
- "dso-has-counter": hasCounter,
20
- });
21
- return (h("div", { class: classes }, hasCounter && h("div", { class: "dso-step-counter" }, (_a = this.step) !== null && _a !== void 0 ? _a : h("slot", { name: "icon" })), h("slot", null)));
13
+ return (h(Host, { "has-counter": hasCounter }, hasCounter && h("div", { class: "dso-step-counter" }, (_a = this.step) !== null && _a !== void 0 ? _a : h("slot", { name: "icon" })), h("slot", null)));
22
14
  }
23
15
  static get is() { return "dso-highlight-box"; }
24
16
  static get encapsulation() { return "shadow"; }
@@ -49,7 +41,7 @@ export class HighlightBox {
49
41
  "text": "For yellow Highlight Box."
50
42
  },
51
43
  "attribute": "yellow",
52
- "reflect": false
44
+ "reflect": true
53
45
  },
54
46
  "border": {
55
47
  "type": "boolean",
@@ -66,7 +58,7 @@ export class HighlightBox {
66
58
  "text": "For a bordered Highlight Box."
67
59
  },
68
60
  "attribute": "border",
69
- "reflect": false
61
+ "reflect": true
70
62
  },
71
63
  "white": {
72
64
  "type": "boolean",
@@ -83,7 +75,7 @@ export class HighlightBox {
83
75
  "text": "For a while Highlight Box."
84
76
  },
85
77
  "attribute": "white",
86
- "reflect": false
78
+ "reflect": true
87
79
  },
88
80
  "dropShadow": {
89
81
  "type": "boolean",
@@ -100,7 +92,7 @@ export class HighlightBox {
100
92
  "text": "For an Highlight Box with a drop shadow."
101
93
  },
102
94
  "attribute": "drop-shadow",
103
- "reflect": false
95
+ "reflect": true
104
96
  },
105
97
  "step": {
106
98
  "type": "number",
@@ -117,7 +109,7 @@ export class HighlightBox {
117
109
  "text": "To create a step indicator."
118
110
  },
119
111
  "attribute": "step",
120
- "reflect": false
112
+ "reflect": true
121
113
  }
122
114
  };
123
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"highlight-box.js","sourceRoot":"","sources":["../../../../src/components/highlight-box/highlight-box.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,MAAM,OAAO,YAAY;;;;;;;;EAkCvB,MAAM;;IACJ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE;MACxC,YAAY,EAAE,IAAI,CAAC,MAAM;MACzB,YAAY,EAAE,IAAI,CAAC,MAAM;MACzB,WAAW,EAAE,IAAI,CAAC,KAAK;MACvB,iBAAiB,EAAE,IAAI,CAAC,UAAU;MAClC,iBAAiB,EAAE,UAAU;KAC9B,CAAC,CAAC;IAEH,OAAO,CACL,WAAK,KAAK,EAAE,OAAO;MAChB,UAAU,IAAI,WAAK,KAAK,EAAC,kBAAkB,IAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,YAAM,IAAI,EAAC,MAAM,GAAQ,CAAO;MAC3F,eAAa,CACT,CACP,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, Element } from \"@stencil/core\";\r\nimport clsx from \"clsx\";\r\n\r\n@Component({\r\n tag: \"dso-highlight-box\",\r\n styleUrl: \"highlight-box.scss\",\r\n shadow: true,\r\n})\r\nexport class HighlightBox {\r\n /**\r\n * For yellow Highlight Box.\r\n */\r\n @Prop()\r\n yellow?: boolean;\r\n\r\n /**\r\n * For a bordered Highlight Box.\r\n */\r\n @Prop()\r\n border?: boolean;\r\n\r\n /**\r\n * For a while Highlight Box.\r\n */\r\n @Prop()\r\n white?: boolean;\r\n\r\n /**\r\n * For an Highlight Box with a drop shadow.\r\n */\r\n @Prop()\r\n dropShadow?: boolean;\r\n\r\n /**\r\n * To create a step indicator.\r\n */\r\n @Prop()\r\n step?: number;\r\n\r\n @Element()\r\n private element!: HTMLDsoHighlightBoxElement;\r\n\r\n render() {\r\n const hasCounter = this.step || !!this.element.querySelector(\"[slot=icon]\");\r\n const classes = clsx(\"dso-highlight-box\", {\r\n \"dso-yellow\": this.yellow,\r\n \"dso-border\": this.border,\r\n \"dso-white\": this.white,\r\n \"dso-drop-shadow\": this.dropShadow,\r\n \"dso-has-counter\": hasCounter,\r\n });\r\n\r\n return (\r\n <div class={classes}>\r\n {hasCounter && <div class=\"dso-step-counter\">{this.step ?? <slot name=\"icon\"></slot>}</div>}\r\n <slot></slot>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"highlight-box.js","sourceRoot":"","sources":["../../../../src/components/highlight-box/highlight-box.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOlE,MAAM,OAAO,YAAY;;;;;;;;EAkCvB,MAAM;;IACJ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAE5E,OAAO,CACL,EAAC,IAAI,mBAAc,UAAU;MAC1B,UAAU,IAAI,WAAK,KAAK,EAAC,kBAAkB,IAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,YAAM,IAAI,EAAC,MAAM,GAAQ,CAAO;MAC3F,eAAa,CACR,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, Element, Host } from \"@stencil/core\";\r\n\r\n@Component({\r\n tag: \"dso-highlight-box\",\r\n styleUrl: \"highlight-box.scss\",\r\n shadow: true,\r\n})\r\nexport class HighlightBox {\r\n /**\r\n * For yellow Highlight Box.\r\n */\r\n @Prop({ reflect: true })\r\n yellow?: boolean;\r\n\r\n /**\r\n * For a bordered Highlight Box.\r\n */\r\n @Prop({ reflect: true })\r\n border?: boolean;\r\n\r\n /**\r\n * For a while Highlight Box.\r\n */\r\n @Prop({ reflect: true })\r\n white?: boolean;\r\n\r\n /**\r\n * For an Highlight Box with a drop shadow.\r\n */\r\n @Prop({ reflect: true })\r\n dropShadow?: boolean;\r\n\r\n /**\r\n * To create a step indicator.\r\n */\r\n @Prop({ reflect: true })\r\n step?: number;\r\n\r\n @Element()\r\n private element!: HTMLDsoHighlightBoxElement;\r\n\r\n render() {\r\n const hasCounter = this.step || !!this.element.querySelector(\"[slot=icon]\");\r\n\r\n return (\r\n <Host has-counter={hasCounter}>\r\n {hasCounter && <div class=\"dso-step-counter\">{this.step ?? <slot name=\"icon\"></slot>}</div>}\r\n <slot></slot>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -1,7 +1,5 @@
1
1
  :host {
2
2
  display: block;
3
- background-color: #f2f2f2;
4
- color: #000;
5
3
  padding: 16px 32px 16px 16px;
6
4
  position: relative;
7
5
  }
@@ -21,9 +21,7 @@
21
21
  }
22
22
 
23
23
  .dso-label {
24
- background-color: #f2f2f2;
25
24
  border-radius: 4px;
26
- color: #191919;
27
25
  display: inline-block;
28
26
  line-height: 1.5;
29
27
  max-width: 100%;
@@ -52,38 +50,51 @@
52
50
  .dso-label button > svg.di {
53
51
  display: block;
54
52
  }
53
+ .dso-label {
54
+ background-color: #f2f2f2;
55
+ border-color: #f2f2f2;
56
+ color: #191919;
57
+ }
55
58
  .dso-label.dso-label-info {
56
59
  background-color: #6ca4d9;
57
- color: #000;
60
+ border-color: #6ca4d9;
61
+ color: #191919;
58
62
  }
59
63
  .dso-label.dso-label-primary {
60
64
  background-color: #275937;
65
+ border-color: #275937;
61
66
  color: #fff;
62
67
  }
63
68
  .dso-label.dso-label-success {
64
69
  background-color: #39870c;
70
+ border-color: #39870c;
65
71
  color: #fff;
66
72
  }
67
73
  .dso-label.dso-label-warning {
68
74
  background-color: #dcd400;
69
- color: #000;
75
+ border-color: #dcd400;
76
+ color: #191919;
70
77
  }
71
78
  .dso-label.dso-label-danger {
72
79
  background-color: #ce3f51;
80
+ border-color: #ce3f51;
73
81
  color: #fff;
74
82
  }
75
83
  .dso-label.dso-label-error {
76
84
  background-color: #ce3f51;
85
+ border-color: #ce3f51;
77
86
  color: #fff;
78
87
  }
79
88
  .dso-label.dso-label-bright {
80
89
  background-color: #fff;
90
+ border-color: #fff;
81
91
  color: #191919;
82
92
  outline: 1px solid #ccc;
83
93
  outline-offset: -1px;
84
94
  }
85
95
  .dso-label.dso-label-attention {
86
96
  background-color: #8b4a6a;
97
+ border-color: #8b4a6a;
87
98
  color: #fff;
88
99
  }
89
100
  .dso-label.dso-compact {
@@ -370,6 +370,7 @@
370
370
  text-align: left;
371
371
  white-space: normal;
372
372
  width: 100%;
373
+ cursor: pointer;
373
374
  }
374
375
  .dso-list-button:focus, .dso-list-button:focus-visible {
375
376
  outline-offset: 2px;
@@ -404,6 +405,9 @@
404
405
  box-shadow: #39870c 0px 1px 0px 0px inset, #39870c 1px 0px 0px 0px inset, #39870c 0px -1px 0px 0px inset;
405
406
  }
406
407
  }
408
+ .dso-list-button label {
409
+ cursor: inherit;
410
+ }
407
411
  .dso-list-button > span {
408
412
  display: block;
409
413
  }
@@ -1,4 +1,4 @@
1
- @keyframes slideInFromTop {
1
+ @keyframes ModalFadeIn {
2
2
  0% {
3
3
  opacity: 0;
4
4
  }
@@ -97,7 +97,7 @@ button::-moz-focus-inner {
97
97
  background-color: #fff;
98
98
  opacity: 1;
99
99
  box-shadow: 0 8px 24px 0 rgba(25, 25, 25, 0.4);
100
- animation: 1s ease-out 0s 1 slideInFromTop;
100
+ animation: 200ms ease-out 0s 1 ModalFadeIn;
101
101
  }
102
102
  .dso-modal .dso-header {
103
103
  position: relative;