@dnncommunity/dnn-elements 0.13.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/cjs/app-globals-3a1e7e63.js +7 -0
  4. package/dist/cjs/app-globals-3a1e7e63.js.map +1 -0
  5. package/dist/cjs/css-shim-3bfdba4f.js +8 -0
  6. package/dist/cjs/css-shim-3bfdba4f.js.map +1 -0
  7. package/dist/cjs/debounce-1de79bc7.js +24 -0
  8. package/dist/cjs/debounce-1de79bc7.js.map +1 -0
  9. package/dist/cjs/dnn-button.cjs.entry.js +88 -0
  10. package/dist/cjs/dnn-button.cjs.entry.js.map +1 -0
  11. package/dist/cjs/dnn-button_14.cjs.entry.js +1580 -0
  12. package/dist/cjs/dnn-button_14.cjs.entry.js.map +1 -0
  13. package/dist/cjs/dnn-checkbox.cjs.entry.js +58 -0
  14. package/dist/cjs/dnn-checkbox.cjs.entry.js.map +1 -0
  15. package/dist/cjs/dnn-chevron.cjs.entry.js +34 -0
  16. package/dist/cjs/dnn-chevron.cjs.entry.js.map +1 -0
  17. package/dist/cjs/dnn-collapsible.cjs.entry.js +112 -0
  18. package/dist/cjs/dnn-collapsible.cjs.entry.js.map +1 -0
  19. package/dist/cjs/dnn-color-picker.cjs.entry.js +508 -0
  20. package/dist/cjs/dnn-color-picker.cjs.entry.js.map +1 -0
  21. package/dist/cjs/dnn-dropzone.cjs.entry.js +153 -0
  22. package/dist/cjs/dnn-dropzone.cjs.entry.js.map +1 -0
  23. package/dist/cjs/dnn-image-cropper.cjs.entry.js +424 -0
  24. package/dist/cjs/dnn-image-cropper.cjs.entry.js.map +1 -0
  25. package/dist/cjs/dnn-modal.cjs.entry.js +62 -0
  26. package/dist/cjs/dnn-modal.cjs.entry.js.map +1 -0
  27. package/dist/cjs/dnn-searchbox.cjs.entry.js +66 -0
  28. package/dist/cjs/dnn-searchbox.cjs.entry.js.map +1 -0
  29. package/dist/cjs/dnn-sort-icon.cjs.entry.js +43 -0
  30. package/dist/cjs/dnn-sort-icon.cjs.entry.js.map +1 -0
  31. package/dist/cjs/dnn-tab.cjs.entry.js +31 -0
  32. package/dist/cjs/dnn-tab.cjs.entry.js.map +1 -0
  33. package/dist/cjs/dnn-tabs.cjs.entry.js +50 -0
  34. package/dist/cjs/dnn-tabs.cjs.entry.js.map +1 -0
  35. package/dist/cjs/dnn-toggle.cjs.entry.js +37 -0
  36. package/dist/cjs/dnn-toggle.cjs.entry.js.map +1 -0
  37. package/dist/cjs/dnn-treeview-item.cjs.entry.js +48 -0
  38. package/dist/cjs/dnn-treeview-item.cjs.entry.js.map +1 -0
  39. package/dist/cjs/dnn.cjs.js +129 -0
  40. package/dist/cjs/dnn.cjs.js.map +1 -0
  41. package/dist/cjs/dom-8ac1ad03.js +77 -0
  42. package/dist/cjs/dom-8ac1ad03.js.map +1 -0
  43. package/dist/cjs/index-e85ec026.js +1327 -0
  44. package/dist/cjs/index-e85ec026.js.map +1 -0
  45. package/dist/cjs/index-eede7745.js +3069 -0
  46. package/dist/cjs/index-eede7745.js.map +1 -0
  47. package/dist/cjs/index.cjs.js +52 -0
  48. package/dist/cjs/index.cjs.js.map +1 -0
  49. package/dist/cjs/loader.cjs.js +39 -0
  50. package/dist/cjs/loader.cjs.js.map +1 -0
  51. package/dist/cjs/shadow-css-41d9783d.js +392 -0
  52. package/dist/cjs/shadow-css-41d9783d.js.map +1 -0
  53. package/dist/collection/collection-manifest.json +25 -0
  54. package/dist/collection/components/dnn-button/dnn-button.css +87 -0
  55. package/dist/collection/components/dnn-button/dnn-button.js +272 -0
  56. package/dist/collection/components/dnn-button/dnn-button.js.map +1 -0
  57. package/dist/collection/components/dnn-checkbox/dnn-checkbox.css +27 -0
  58. package/dist/collection/components/dnn-checkbox/dnn-checkbox.js +140 -0
  59. package/dist/collection/components/dnn-checkbox/dnn-checkbox.js.map +1 -0
  60. package/dist/collection/components/dnn-chevron/dnn-chevron.css +30 -0
  61. package/dist/collection/components/dnn-chevron/dnn-chevron.js +107 -0
  62. package/dist/collection/components/dnn-chevron/dnn-chevron.js.map +1 -0
  63. package/dist/collection/components/dnn-collapsible/dnn-collapsible.css +8 -0
  64. package/dist/collection/components/dnn-collapsible/dnn-collapsible.js +188 -0
  65. package/dist/collection/components/dnn-collapsible/dnn-collapsible.js.map +1 -0
  66. package/dist/collection/components/dnn-color-picker/dnn-color-picker.css +225 -0
  67. package/dist/collection/components/dnn-color-picker/dnn-color-picker.js +434 -0
  68. package/dist/collection/components/dnn-color-picker/dnn-color-picker.js.map +1 -0
  69. package/dist/collection/components/dnn-dropzone/dnn-dropzone.css +62 -0
  70. package/dist/collection/components/dnn-dropzone/dnn-dropzone.js +266 -0
  71. package/dist/collection/components/dnn-dropzone/dnn-dropzone.js.map +1 -0
  72. package/dist/collection/components/dnn-image-cropper/CornerType.js +9 -0
  73. package/dist/collection/components/dnn-image-cropper/CornerType.js.map +1 -0
  74. package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.css +80 -0
  75. package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.js +539 -0
  76. package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.js.map +1 -0
  77. package/dist/collection/components/dnn-modal/dnn-modal.css +67 -0
  78. package/dist/collection/components/dnn-modal/dnn-modal.js +173 -0
  79. package/dist/collection/components/dnn-modal/dnn-modal.js.map +1 -0
  80. package/dist/collection/components/dnn-searchbox/dnn-searchbox.css +48 -0
  81. package/dist/collection/components/dnn-searchbox/dnn-searchbox.js +137 -0
  82. package/dist/collection/components/dnn-searchbox/dnn-searchbox.js.map +1 -0
  83. package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.css +32 -0
  84. package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.js +81 -0
  85. package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.js.map +1 -0
  86. package/dist/collection/components/dnn-tab/dnn-tab.css +0 -0
  87. package/dist/collection/components/dnn-tab/dnn-tab.js +84 -0
  88. package/dist/collection/components/dnn-tab/dnn-tab.js.map +1 -0
  89. package/dist/collection/components/dnn-tabs/dnn-tabs.css +40 -0
  90. package/dist/collection/components/dnn-tabs/dnn-tabs.js +53 -0
  91. package/dist/collection/components/dnn-tabs/dnn-tabs.js.map +1 -0
  92. package/dist/collection/components/dnn-toggle/dnn-toggle.css +52 -0
  93. package/dist/collection/components/dnn-toggle/dnn-toggle.js +94 -0
  94. package/dist/collection/components/dnn-toggle/dnn-toggle.js.map +1 -0
  95. package/dist/collection/components/dnn-toggle/toggle-interface.js +2 -0
  96. package/dist/collection/components/dnn-toggle/toggle-interface.js.map +1 -0
  97. package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.css +47 -0
  98. package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.js +77 -0
  99. package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.js.map +1 -0
  100. package/dist/collection/index.js +3 -0
  101. package/dist/collection/index.js.map +1 -0
  102. package/dist/collection/utilities/colorInfo.js +191 -0
  103. package/dist/collection/utilities/colorInfo.js.map +1 -0
  104. package/dist/collection/utilities/debounce.js +19 -0
  105. package/dist/collection/utilities/debounce.js.map +1 -0
  106. package/dist/collection/utilities/dnnServicesFramework.js +42 -0
  107. package/dist/collection/utilities/dnnServicesFramework.js.map +1 -0
  108. package/dist/dnn/app-globals-0f993ce5.js +5 -0
  109. package/dist/dnn/app-globals-0f993ce5.js.map +1 -0
  110. package/dist/dnn/css-shim-20dbffa5.js +6 -0
  111. package/dist/dnn/css-shim-20dbffa5.js.map +1 -0
  112. package/dist/dnn/debounce-06f55268.js +22 -0
  113. package/dist/dnn/debounce-06f55268.js.map +1 -0
  114. package/dist/dnn/dnn-button.entry.js +84 -0
  115. package/dist/dnn/dnn-button.entry.js.map +1 -0
  116. package/dist/dnn/dnn-checkbox.entry.js +54 -0
  117. package/dist/dnn/dnn-checkbox.entry.js.map +1 -0
  118. package/dist/dnn/dnn-chevron.entry.js +30 -0
  119. package/dist/dnn/dnn-chevron.entry.js.map +1 -0
  120. package/dist/dnn/dnn-collapsible.entry.js +108 -0
  121. package/dist/dnn/dnn-collapsible.entry.js.map +1 -0
  122. package/dist/dnn/dnn-color-picker.entry.js +504 -0
  123. package/dist/dnn/dnn-color-picker.entry.js.map +1 -0
  124. package/dist/dnn/dnn-dropzone.entry.js +149 -0
  125. package/dist/dnn/dnn-dropzone.entry.js.map +1 -0
  126. package/dist/dnn/dnn-image-cropper.entry.js +420 -0
  127. package/dist/dnn/dnn-image-cropper.entry.js.map +1 -0
  128. package/dist/dnn/dnn-modal.entry.js +58 -0
  129. package/dist/dnn/dnn-modal.entry.js.map +1 -0
  130. package/dist/dnn/dnn-searchbox.entry.js +62 -0
  131. package/dist/dnn/dnn-searchbox.entry.js.map +1 -0
  132. package/dist/dnn/dnn-sort-icon.entry.js +39 -0
  133. package/dist/dnn/dnn-sort-icon.entry.js.map +1 -0
  134. package/dist/dnn/dnn-tab.entry.js +27 -0
  135. package/dist/dnn/dnn-tab.entry.js.map +1 -0
  136. package/dist/dnn/dnn-tabs.entry.js +46 -0
  137. package/dist/dnn/dnn-tabs.entry.js.map +1 -0
  138. package/dist/dnn/dnn-toggle.entry.js +33 -0
  139. package/dist/dnn/dnn-toggle.entry.js.map +1 -0
  140. package/dist/dnn/dnn-treeview-item.entry.js +44 -0
  141. package/dist/dnn/dnn-treeview-item.entry.js.map +1 -0
  142. package/dist/dnn/dnn.esm.js +127 -0
  143. package/dist/dnn/dnn.esm.js.map +1 -0
  144. package/dist/dnn/dom-c5ed0ba5.js +75 -0
  145. package/dist/dnn/dom-c5ed0ba5.js.map +1 -0
  146. package/dist/dnn/index-6c0764e5.js +3033 -0
  147. package/dist/dnn/index-6c0764e5.js.map +1 -0
  148. package/dist/dnn/index.esm.js +47 -0
  149. package/dist/dnn/index.esm.js.map +1 -0
  150. package/dist/dnn/p-0e94f5ee.js +2 -0
  151. package/dist/dnn/p-0e94f5ee.js.map +1 -0
  152. package/dist/dnn/p-7acf3104.entry.js +11 -0
  153. package/dist/dnn/p-7acf3104.entry.js.map +1 -0
  154. package/dist/dnn/p-bd3d3361.js +2 -0
  155. package/dist/dnn/p-bd3d3361.js.map +1 -0
  156. package/dist/dnn/shadow-css-8c625855.js +390 -0
  157. package/dist/dnn/shadow-css-8c625855.js.map +1 -0
  158. package/dist/esm/app-globals-0f993ce5.js +5 -0
  159. package/dist/esm/app-globals-0f993ce5.js.map +1 -0
  160. package/dist/esm/css-shim-20dbffa5.js +6 -0
  161. package/dist/esm/css-shim-20dbffa5.js.map +1 -0
  162. package/dist/esm/debounce-06f55268.js +22 -0
  163. package/dist/esm/debounce-06f55268.js.map +1 -0
  164. package/dist/esm/dnn-button.entry.js +84 -0
  165. package/dist/esm/dnn-button.entry.js.map +1 -0
  166. package/dist/esm/dnn-button_14.entry.js +1563 -0
  167. package/dist/esm/dnn-button_14.entry.js.map +1 -0
  168. package/dist/esm/dnn-checkbox.entry.js +54 -0
  169. package/dist/esm/dnn-checkbox.entry.js.map +1 -0
  170. package/dist/esm/dnn-chevron.entry.js +30 -0
  171. package/dist/esm/dnn-chevron.entry.js.map +1 -0
  172. package/dist/esm/dnn-collapsible.entry.js +108 -0
  173. package/dist/esm/dnn-collapsible.entry.js.map +1 -0
  174. package/dist/esm/dnn-color-picker.entry.js +504 -0
  175. package/dist/esm/dnn-color-picker.entry.js.map +1 -0
  176. package/dist/esm/dnn-dropzone.entry.js +149 -0
  177. package/dist/esm/dnn-dropzone.entry.js.map +1 -0
  178. package/dist/esm/dnn-image-cropper.entry.js +420 -0
  179. package/dist/esm/dnn-image-cropper.entry.js.map +1 -0
  180. package/dist/esm/dnn-modal.entry.js +58 -0
  181. package/dist/esm/dnn-modal.entry.js.map +1 -0
  182. package/dist/esm/dnn-searchbox.entry.js +62 -0
  183. package/dist/esm/dnn-searchbox.entry.js.map +1 -0
  184. package/dist/esm/dnn-sort-icon.entry.js +39 -0
  185. package/dist/esm/dnn-sort-icon.entry.js.map +1 -0
  186. package/dist/esm/dnn-tab.entry.js +27 -0
  187. package/dist/esm/dnn-tab.entry.js.map +1 -0
  188. package/dist/esm/dnn-tabs.entry.js +46 -0
  189. package/dist/esm/dnn-tabs.entry.js.map +1 -0
  190. package/dist/esm/dnn-toggle.entry.js +33 -0
  191. package/dist/esm/dnn-toggle.entry.js.map +1 -0
  192. package/dist/esm/dnn-treeview-item.entry.js +44 -0
  193. package/dist/esm/dnn-treeview-item.entry.js.map +1 -0
  194. package/dist/esm/dnn.js +127 -0
  195. package/dist/esm/dnn.js.map +1 -0
  196. package/dist/esm/dom-c5ed0ba5.js +75 -0
  197. package/dist/esm/dom-c5ed0ba5.js.map +1 -0
  198. package/dist/esm/index-6c0764e5.js +3033 -0
  199. package/dist/esm/index-6c0764e5.js.map +1 -0
  200. package/dist/esm/index-f79d9e82.js +1299 -0
  201. package/dist/esm/index-f79d9e82.js.map +1 -0
  202. package/dist/esm/index.js +47 -0
  203. package/dist/esm/index.js.map +1 -0
  204. package/dist/esm/loader.js +35 -0
  205. package/dist/esm/loader.js.map +1 -0
  206. package/dist/esm/polyfills/core-js.js +11 -0
  207. package/dist/esm/polyfills/css-shim.js +1 -0
  208. package/dist/esm/polyfills/dom.js +79 -0
  209. package/dist/esm/polyfills/es5-html-element.js +1 -0
  210. package/dist/esm/polyfills/index.js +34 -0
  211. package/dist/esm/polyfills/system.js +6 -0
  212. package/dist/esm/shadow-css-8c625855.js +390 -0
  213. package/dist/esm/shadow-css-8c625855.js.map +1 -0
  214. package/dist/index.cjs.js +1 -0
  215. package/dist/index.js +1 -0
  216. package/dist/types/components/dnn-button/dnn-button.d.ts +55 -0
  217. package/dist/types/components/dnn-checkbox/dnn-checkbox.d.ts +16 -0
  218. package/dist/types/components/dnn-chevron/dnn-chevron.d.ts +13 -0
  219. package/dist/types/components/dnn-collapsible/dnn-collapsible.d.ts +22 -0
  220. package/dist/types/components/dnn-color-picker/dnn-color-picker.d.ts +46 -0
  221. package/dist/types/components/dnn-dropzone/dnn-dropzone.d.ts +45 -0
  222. package/dist/types/components/dnn-image-cropper/CornerType.d.ts +6 -0
  223. package/dist/types/components/dnn-image-cropper/dnn-image-cropper.d.ts +62 -0
  224. package/dist/types/components/dnn-modal/dnn-modal.d.ts +35 -0
  225. package/dist/types/components/dnn-searchbox/dnn-searchbox.d.ts +22 -0
  226. package/dist/types/components/dnn-sort-icon/dnn-sort-icon.d.ts +9 -0
  227. package/dist/types/components/dnn-tab/dnn-tab.d.ts +11 -0
  228. package/dist/types/components/dnn-tabs/dnn-tabs.d.ts +11 -0
  229. package/dist/types/components/dnn-toggle/dnn-toggle.d.ts +13 -0
  230. package/dist/types/components/dnn-toggle/toggle-interface.d.ts +3 -0
  231. package/dist/types/components/dnn-treeview-item/dnn-treeview-item.d.ts +16 -0
  232. package/dist/types/components.d.ts +611 -0
  233. package/dist/types/index.d.ts +3 -0
  234. package/dist/types/stencil-public-runtime.d.ts +1565 -0
  235. package/dist/types/utilities/colorInfo.d.ts +52 -0
  236. package/dist/types/utilities/debounce.d.ts +5 -0
  237. package/dist/types/utilities/dnnServicesFramework.d.ts +19 -0
  238. package/loader/cdn.js +3 -0
  239. package/loader/index.cjs.js +3 -0
  240. package/loader/index.d.ts +12 -0
  241. package/loader/index.es2017.js +3 -0
  242. package/loader/index.js +4 -0
  243. package/loader/package.json +10 -0
  244. package/package.json +48 -0
@@ -0,0 +1,40 @@
1
+ :host {
2
+ /**
3
+ * @prop --color-background: The color of the inactive tabs.
4
+ * @prop --color-text: The color of the text for inactive tabs.
5
+ * @prop --color-visible: The color of the active tab.
6
+ * @prop --color-visible-text: The color of the text for the active tab.
7
+ * @prop --color-focus: outline color when hovering or pre-selecting a tab.
8
+ */
9
+ display: block;
10
+ --color-background: var(--dnn-color-secondary-dark, lightgray);
11
+ --color-text: var(--dnn-color-secondary-contrast, #333);
12
+ --color-visible: var(--dnn-color-primary, #3792ED);
13
+ --color-visible-text: var(--dnn-color-primary-contrast, #FFF);
14
+ --color-focus: var(--dnn-color-primary, #3792ed);
15
+ }
16
+
17
+ .tabTitles {
18
+ display: flex;
19
+ background-color: var(--color-background);
20
+ color: var(--color-text);
21
+ }
22
+ .tabTitles button {
23
+ padding: 0.5rem 1rem;
24
+ border: 0;
25
+ margin: 0;
26
+ background-color: transparent;
27
+ }
28
+ .tabTitles button.visible {
29
+ background-color: var(--color-visible);
30
+ color: var(--color-bisible-text);
31
+ }
32
+ .tabTitles button:focus, .tabTitles button:hover {
33
+ outline: none;
34
+ box-shadow: 0 0 2px 2px var(--color-focus);
35
+ }
36
+
37
+ .currentTab {
38
+ border: 1px solid var(--color-background);
39
+ padding: 1rem;
40
+ }
@@ -0,0 +1,53 @@
1
+ import { Component, Host, h, State } from "@stencil/core";
2
+ export class DnnTabs {
3
+ constructor() {
4
+ this.tabTitles = [];
5
+ this.selectedTabTitle = "";
6
+ }
7
+ componentDidLoad() {
8
+ this.updateTitles();
9
+ this.showFirstTab();
10
+ }
11
+ getTabs() {
12
+ return this.component.shadowRoot.querySelector("slot").assignedElements();
13
+ }
14
+ updateTitles() {
15
+ const tabs = this.getTabs();
16
+ tabs.forEach(tab => this.tabTitles = [...this.tabTitles, tab.tabTitle]);
17
+ }
18
+ showFirstTab() {
19
+ const tab = this.getTabs()[0];
20
+ tab.show();
21
+ this.selectedTabTitle = tab.tabTitle;
22
+ }
23
+ showTab(tabTitle) {
24
+ const tabs = this.getTabs();
25
+ tabs.forEach(tab => {
26
+ if (tab.tabTitle == tabTitle) {
27
+ tab.show();
28
+ return;
29
+ }
30
+ tab.hide();
31
+ });
32
+ this.selectedTabTitle = tabTitle;
33
+ }
34
+ render() {
35
+ return (h(Host, { ref: el => this.component = el },
36
+ h("div", { class: "tabTitles" }, this.tabTitles.map(tabTitle => h("button", { class: this.selectedTabTitle == tabTitle ? "visible" : "", onClick: () => this.showTab(tabTitle) }, tabTitle))),
37
+ h("div", { class: "currentTab" },
38
+ h("slot", null))));
39
+ }
40
+ static get is() { return "dnn-tabs"; }
41
+ static get encapsulation() { return "shadow"; }
42
+ static get originalStyleUrls() { return {
43
+ "$": ["dnn-tabs.scss"]
44
+ }; }
45
+ static get styleUrls() { return {
46
+ "$": ["dnn-tabs.css"]
47
+ }; }
48
+ static get states() { return {
49
+ "tabTitles": {},
50
+ "selectedTabTitle": {}
51
+ }; }
52
+ }
53
+ //# sourceMappingURL=dnn-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dnn-tabs.js","sourceRoot":"","sources":["../../../src/components/dnn-tabs/dnn-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAO1D,MAAM,OAAO,OAAO;EALpB;IAQa,cAAS,GAAa,EAAE,CAAC;IACzB,qBAAgB,GAAW,EAAE,CAAC;GAsD1C;EApDG,gBAAgB;IACZ,IAAI,CAAC,YAAY,EAAE,CAAC;IACpB,IAAI,CAAC,YAAY,EAAE,CAAC;EACxB,CAAC;EAEO,OAAO;IACX,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAyB,CAAC;EACrG,CAAC;EAEO,YAAY;IAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC5E,CAAC;EAEO,YAAY;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,CAAC;EACzC,CAAC;EAEO,OAAO,CAAC,QAAgB;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;MACf,IAAI,GAAG,CAAC,QAAQ,IAAI,QAAQ,EAAC;QACzB,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,OAAO;OACV;MAED,GAAG,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;EACrC,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI,IAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE;MAChC,WAAK,KAAK,EAAC,WAAW,IACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAC3B,cACI,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA,CAAC,CAAC,EAAE,EACxD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAEpC,QAAQ,CACJ,CACZ,CACC;MACN,WAAK,KAAK,EAAC,YAAY;QACnB,eAAa,CACX,CACH,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, Host, h, State } from \"@stencil/core\";\r\n\r\n@Component({\r\n tag: 'dnn-tabs',\r\n styleUrl: 'dnn-tabs.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTabs {\r\n private component: HTMLElement;\r\n\r\n @State() tabTitles: string[] = [];\r\n @State() selectedTabTitle: string = \"\";\r\n\r\n componentDidLoad(){\r\n this.updateTitles();\r\n this.showFirstTab();\r\n }\r\n\r\n private getTabs() {\r\n return this.component.shadowRoot.querySelector(\"slot\").assignedElements() as HTMLDnnTabElement[];\r\n }\r\n\r\n private updateTitles(){\r\n const tabs = this.getTabs();\r\n tabs.forEach(tab => this.tabTitles = [...this.tabTitles, tab.tabTitle]);\r\n }\r\n\r\n private showFirstTab(){\r\n const tab = this.getTabs()[0];\r\n tab.show();\r\n this.selectedTabTitle = tab.tabTitle;\r\n }\r\n\r\n private showTab(tabTitle: string) {\r\n const tabs = this.getTabs();\r\n tabs.forEach(tab => {\r\n if (tab.tabTitle == tabTitle){\r\n tab.show();\r\n return;\r\n }\r\n\r\n tab.hide();\r\n });\r\n this.selectedTabTitle = tabTitle;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host ref={el => this.component = el}>\r\n <div class=\"tabTitles\">\r\n {this.tabTitles.map(tabTitle =>\r\n <button\r\n class={this.selectedTabTitle == tabTitle ? \"visible\": \"\"}\r\n onClick={() => this.showTab(tabTitle)}\r\n >\r\n {tabTitle}\r\n </button>\r\n )}\r\n </div>\r\n <div class=\"currentTab\">\r\n <slot></slot>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}"]}
@@ -0,0 +1,52 @@
1
+ :host {
2
+ /**
3
+ * @prop --background: Background of the toggle.
4
+ * @prop --background-checked: Background of the toggle when checked.
5
+ * @prop --handle-background: Background of the handle.
6
+ * @prop --handle-background-checked: Background of the handle when checked.
7
+ * @prop --border-radius: The radius of the background borders.
8
+ * @prop --handle-border-radius: The radius of the handle.
9
+ */
10
+ display: inline-block;
11
+ outline: none;
12
+ cursor: pointer;
13
+ }
14
+
15
+ button {
16
+ height: 1.5em;
17
+ width: 2.5em;
18
+ outline: none;
19
+ background-color: var(--background, #888);
20
+ border: 0;
21
+ border-radius: var(--border-radius, var(--dnn-controls-radius, 0.75em));
22
+ padding: 0.1em;
23
+ position: relative;
24
+ margin: 0;
25
+ transition: background-color 300ms ease-in-out;
26
+ position: relative;
27
+ cursor: pointer;
28
+ }
29
+ button:hover, button:focus {
30
+ box-shadow: 0 0 2px 2px var(--dnn-color-primary);
31
+ }
32
+ button.checked {
33
+ background-color: var(--background-checked, var(--dnn-color-primary, blue));
34
+ }
35
+ button.checked .handle {
36
+ left: calc(1em + 4px);
37
+ }
38
+ button:disabled {
39
+ opacity: 0.5;
40
+ cursor: not-allowed;
41
+ box-shadow: none;
42
+ }
43
+ button .handle {
44
+ transition: all 300ms ease-in-out;
45
+ background-color: white;
46
+ width: 1em;
47
+ height: 1em;
48
+ border-radius: var(--dnn-controls-radius, 50%);
49
+ position: absolute;
50
+ top: calc(50% - 0.5em);
51
+ left: 2px;
52
+ }
@@ -0,0 +1,94 @@
1
+ import { Component, h, Element, Prop, Event, Watch, Host } from "@stencil/core";
2
+ export class DnnToggle {
3
+ constructor() {
4
+ /** If 'true' the toggle is checked (on). */
5
+ this.checked = false;
6
+ /** If 'true' the toggle is not be interacted with. */
7
+ this.disabled = false;
8
+ }
9
+ checkedChanged(isChecked) {
10
+ this.checkChanged.emit({ checked: isChecked });
11
+ }
12
+ render() {
13
+ return (h(Host, null,
14
+ h("button", { disabled: this.disabled, class: { 'checked': this.checked }, onClick: () => {
15
+ if (!this.disabled) {
16
+ this.checked = !this.checked;
17
+ }
18
+ } },
19
+ h("div", { class: "handle" }))));
20
+ }
21
+ static get is() { return "dnn-toggle"; }
22
+ static get encapsulation() { return "shadow"; }
23
+ static get originalStyleUrls() { return {
24
+ "$": ["dnn-toggle.scss"]
25
+ }; }
26
+ static get styleUrls() { return {
27
+ "$": ["dnn-toggle.css"]
28
+ }; }
29
+ static get properties() { return {
30
+ "checked": {
31
+ "type": "boolean",
32
+ "mutable": true,
33
+ "complexType": {
34
+ "original": "boolean",
35
+ "resolved": "boolean",
36
+ "references": {}
37
+ },
38
+ "required": false,
39
+ "optional": false,
40
+ "docs": {
41
+ "tags": [],
42
+ "text": "If 'true' the toggle is checked (on)."
43
+ },
44
+ "attribute": "checked",
45
+ "reflect": false,
46
+ "defaultValue": "false"
47
+ },
48
+ "disabled": {
49
+ "type": "boolean",
50
+ "mutable": false,
51
+ "complexType": {
52
+ "original": "boolean",
53
+ "resolved": "boolean",
54
+ "references": {}
55
+ },
56
+ "required": false,
57
+ "optional": false,
58
+ "docs": {
59
+ "tags": [],
60
+ "text": "If 'true' the toggle is not be interacted with."
61
+ },
62
+ "attribute": "disabled",
63
+ "reflect": false,
64
+ "defaultValue": "false"
65
+ }
66
+ }; }
67
+ static get events() { return [{
68
+ "method": "checkChanged",
69
+ "name": "checkChanged",
70
+ "bubbles": true,
71
+ "cancelable": true,
72
+ "composed": true,
73
+ "docs": {
74
+ "tags": [],
75
+ "text": "Fires when the toggle changed"
76
+ },
77
+ "complexType": {
78
+ "original": "DnnToggleChangeEventDetail",
79
+ "resolved": "DnnToggleChangeEventDetail",
80
+ "references": {
81
+ "DnnToggleChangeEventDetail": {
82
+ "location": "import",
83
+ "path": "./toggle-interface"
84
+ }
85
+ }
86
+ }
87
+ }]; }
88
+ static get elementRef() { return "element"; }
89
+ static get watchers() { return [{
90
+ "propName": "checked",
91
+ "methodName": "checkedChanged"
92
+ }]; }
93
+ }
94
+ //# sourceMappingURL=dnn-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dnn-toggle.js","sourceRoot":"","sources":["../../../src/components/dnn-toggle/dnn-toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAgB,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS9F,MAAM,OAAO,SAAS;EALtB;IASI,4CAA4C;IACrB,YAAO,GAAG,KAAK,CAAC;IAEvC,sDAAsD;IAC9C,aAAQ,GAAG,KAAK,CAAC;GAyB5B;EAnBG,cAAc,CAAC,SAAkB;IAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC,CAAC;EACjD,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI;MACD,cAAQ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAC,EAC7D,OAAO,EAAE,GAAG,EAAE;UACV,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;WAChC;QACL,CAAC;QAED,WAAK,KAAK,EAAC,QAAQ,GAAO,CACrB,CACN,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import { Component, h, Element, Prop, Event, EventEmitter, Watch, Host } from \"@stencil/core\";\r\nimport { DnnToggleChangeEventDetail } from \"./toggle-interface\";\r\n\r\n\r\n@Component({\r\n tag: \"dnn-toggle\",\r\n styleUrl: \"dnn-toggle.scss\",\r\n shadow: true\r\n})\r\nexport class DnnToggle {\r\n\r\n @Element() element: HTMLDnnToggleElement;\r\n\r\n /** If 'true' the toggle is checked (on). */\r\n @Prop({mutable: true}) checked = false;\r\n\r\n /** If 'true' the toggle is not be interacted with. */\r\n @Prop() disabled = false;\r\n\r\n /** Fires when the toggle changed */\r\n @Event() checkChanged!: EventEmitter<DnnToggleChangeEventDetail>;\r\n\r\n @Watch(\"checked\")\r\n checkedChanged(isChecked: boolean){\r\n this.checkChanged.emit({checked: isChecked});\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button disabled={this.disabled} class={{'checked': this.checked}}\r\n onClick={() => {\r\n if (!this.disabled) {\r\n this.checked = !this.checked;\r\n }\r\n }}\r\n >\r\n <div class=\"handle\"></div>\r\n </button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=toggle-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-interface.js","sourceRoot":"","sources":["../../../src/components/dnn-toggle/toggle-interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface DnnToggleChangeEventDetail {\r\n checked: boolean;\r\n}"]}
@@ -0,0 +1,47 @@
1
+ :host {
2
+ display: flex;
3
+ overflow: hidden;
4
+ }
5
+
6
+ .expander {
7
+ width: 24px;
8
+ height: 24px;
9
+ }
10
+ .expander button {
11
+ transition: all 150ms ease-in-out;
12
+ background-color: transparent;
13
+ border: none;
14
+ padding: 0;
15
+ margin: 0;
16
+ outline: none;
17
+ height: 1em;
18
+ display: flex;
19
+ justify-content: center;
20
+ align-items: center;
21
+ cursor: pointer;
22
+ position: relative;
23
+ top: 2px;
24
+ }
25
+ .expander button svg :first-child {
26
+ transition: all 150ms ease-in-out;
27
+ fill: white;
28
+ stroke: black;
29
+ }
30
+ .expander.expanded button {
31
+ transform: rotate(45deg);
32
+ }
33
+ .expander.expanded button svg :first-child {
34
+ fill: black;
35
+ stroke: black;
36
+ }
37
+
38
+ div.item .item-slot {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: 0.25em;
42
+ }
43
+ div.item div.children {
44
+ overflow: hidden;
45
+ height: 0;
46
+ transition: all 150ms ease-in-out;
47
+ }
@@ -0,0 +1,77 @@
1
+ import { Component, Host, h, Prop, State, Element } from '@stencil/core';
2
+ export class DnnTreeviewItem {
3
+ constructor() {
4
+ /** Defines if the current node is expanded */
5
+ this.expanded = false;
6
+ this.hasChildren = false;
7
+ }
8
+ componentDidLoad() {
9
+ const children = this.childrenElement.children[0];
10
+ const count = children.assignedElements().length;
11
+ if (count > 0) {
12
+ this.hasChildren = true;
13
+ }
14
+ if (this.expanded) {
15
+ this.expander.classList.add("expanded");
16
+ this.collapsible.expanded = false;
17
+ setTimeout(() => {
18
+ this.collapsible.expanded = true;
19
+ }, 300);
20
+ }
21
+ }
22
+ toggleCollapse() {
23
+ this.expanded = !this.expanded;
24
+ if (this.expanded) {
25
+ this.expander.classList.add("expanded");
26
+ return;
27
+ }
28
+ this.expander.classList.remove("expanded");
29
+ }
30
+ render() {
31
+ return (h(Host, null,
32
+ h("div", { class: "expander", ref: el => this.expander = el }, this.hasChildren &&
33
+ h("button", { onClick: () => this.toggleCollapse() },
34
+ h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" },
35
+ h("path", { d: "M10 17l5-5-5-5v10z" }),
36
+ h("path", { d: "M0 24V0h24v24H0z", fill: "none" })))),
37
+ h("div", { class: "item" },
38
+ h("div", { class: "item-slot" },
39
+ h("slot", null)),
40
+ h("dnn-collapsible", { ref: el => this.collapsible = el, expanded: this.expanded },
41
+ h("div", { ref: el => this.childrenElement = el },
42
+ h("slot", { name: "children" }))))));
43
+ }
44
+ static get is() { return "dnn-treeview-item"; }
45
+ static get encapsulation() { return "shadow"; }
46
+ static get originalStyleUrls() { return {
47
+ "$": ["dnn-treeview-item.scss"]
48
+ }; }
49
+ static get styleUrls() { return {
50
+ "$": ["dnn-treeview-item.css"]
51
+ }; }
52
+ static get properties() { return {
53
+ "expanded": {
54
+ "type": "boolean",
55
+ "mutable": true,
56
+ "complexType": {
57
+ "original": "boolean",
58
+ "resolved": "boolean",
59
+ "references": {}
60
+ },
61
+ "required": false,
62
+ "optional": false,
63
+ "docs": {
64
+ "tags": [],
65
+ "text": "Defines if the current node is expanded"
66
+ },
67
+ "attribute": "expanded",
68
+ "reflect": false,
69
+ "defaultValue": "false"
70
+ }
71
+ }; }
72
+ static get states() { return {
73
+ "hasChildren": {}
74
+ }; }
75
+ static get elementRef() { return "el"; }
76
+ }
77
+ //# sourceMappingURL=dnn-treeview-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dnn-treeview-item.js","sourceRoot":"","sources":["../../../src/components/dnn-treeview-item/dnn-treeview-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOzE,MAAM,OAAO,eAAe;EAL5B;IAWE,+CAA+C;IACxB,aAAQ,GAAY,KAAK,CAAC;IAExC,gBAAW,GAAY,KAAK,CAAC;GAsDvC;EAjDC,gBAAgB;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAoB,CAAC;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAA;IAChD,IAAI,KAAK,GAAG,CAAC,EAAC;MACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IACD,IAAI,IAAI,CAAC,QAAQ,EAAC;MAChB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;MACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,KAAK,CAAC;MAClC,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;MACnC,CAAC,EAAE,GAAG,CAAC,CAAC;KACT;EACH,CAAC;EAEO,cAAc;IACpB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,IAAI,CAAC,QAAQ,EAAC;MAChB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;MACxC,OAAO;KACR;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;EAC7C,CAAC;EAED,MAAM;IACJ,OAAO,CACL,EAAC,IAAI;MACH,WAAK,KAAK,EAAC,UAAU,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,IAChD,IAAI,CAAC,WAAW;QACf,cACE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;UACpC,WAAK,KAAK,EAAC,4BAA4B,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,SAAS;YAAC,YAAM,CAAC,EAAC,oBAAoB,GAAE;YAAA,YAAM,CAAC,EAAC,kBAAkB,EAAC,IAAI,EAAC,MAAM,GAAE,CAAM,CAC3K,CAEP;MACN,WAAK,KAAK,EAAC,MAAM;QACf,WAAK,KAAK,EAAC,WAAW;UACpB,eAAa,CACT;QACN,uBAAiB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;UACxE,WAAK,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE;YACvC,YAAM,IAAI,EAAC,UAAU,GAAQ,CACzB,CACU,CACZ,CACH,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, State, Element } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-treeview-item',\r\n styleUrl: 'dnn-treeview-item.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTreeviewItem {\r\n \r\n private expander!: HTMLDivElement;\r\n\r\n @Element() el!: HTMLDnnTreeviewItemElement;\r\n \r\n /** Defines if the current node is expanded */\r\n @Prop({mutable: true}) expanded: boolean = false;\r\n\r\n @State() hasChildren: boolean = false;\r\n \r\n private childrenElement!: HTMLDivElement;\r\n private collapsible!: HTMLDnnCollapsibleElement;\r\n\r\n componentDidLoad() {\r\n const children = this.childrenElement.children[0] as HTMLSlotElement;\r\n const count = children.assignedElements().length\r\n if (count > 0){\r\n this.hasChildren = true;\r\n }\r\n if (this.expanded){\r\n this.expander.classList.add(\"expanded\");\r\n this.collapsible.expanded = false;\r\n setTimeout(() => {\r\n this.collapsible.expanded = true;\r\n }, 300);\r\n }\r\n }\r\n\r\n private toggleCollapse(): void {\r\n this.expanded = !this.expanded;\r\n if (this.expanded){\r\n this.expander.classList.add(\"expanded\");\r\n return;\r\n }\r\n\r\n this.expander.classList.remove(\"expanded\");\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"expander\" ref={el => this.expander = el}>\r\n {this.hasChildren &&\r\n <button\r\n onClick={() => this.toggleCollapse()}>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M10 17l5-5-5-5v10z\"/><path d=\"M0 24V0h24v24H0z\" fill=\"none\"/></svg>\r\n </button>\r\n }\r\n </div>\r\n <div class=\"item\">\r\n <div class=\"item-slot\">\r\n <slot></slot>\r\n </div>\r\n <dnn-collapsible ref={el => this.collapsible = el} expanded={this.expanded}>\r\n <div ref={el => this.childrenElement = el}>\r\n <slot name=\"children\"></slot>\r\n </div>\r\n </dnn-collapsible>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n\r\nexport interface ExpandedToggledEvent{\r\n state: \"expanded\" | \"collapsed\";\r\n height: number;\r\n}"]}
@@ -0,0 +1,3 @@
1
+ export * from './utilities/debounce';
2
+ export * from './utilities/dnnServicesFramework';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC","sourcesContent":["export { Components, JSX } from './components';\r\nexport * from './utilities/debounce';\r\nexport * from './utilities/dnnServicesFramework';\r\n"]}
@@ -0,0 +1,191 @@
1
+ /** Color utility class with hsl and rgb converters
2
+ * based on math at https://en.wikipedia.org/wiki/HSL_and_HSV
3
+ * @copyright Copyright (c) .NET Foundation. All rights reserved.
4
+ * @license MIT
5
+ */
6
+ export class ColorInfo {
7
+ constructor() {
8
+ this._hue = 0;
9
+ this._saturation = 0;
10
+ this._lightness = 0;
11
+ }
12
+ /** gets the color hue
13
+ * @returns a number between 0 and 359, could contain decimals
14
+ */
15
+ get hue() { return this._hue; }
16
+ set hue(value) {
17
+ if (value < 0) {
18
+ value = 0;
19
+ }
20
+ if (value > 359) {
21
+ value = 359;
22
+ }
23
+ this._hue = value;
24
+ }
25
+ /** gets the color saturation
26
+ * @returns a number between 0 and 1, could contain decimals
27
+ */
28
+ get saturation() { return this._saturation; }
29
+ set saturation(value) {
30
+ if (value < 0) {
31
+ value = 0;
32
+ }
33
+ if (value > 1) {
34
+ value = 1;
35
+ }
36
+ this._saturation = value;
37
+ }
38
+ /** gets the color lightness
39
+ * @returns a number between 0 and 1, could contain decimals
40
+ */
41
+ get lightness() { return this._lightness; }
42
+ set lightness(value) {
43
+ if (value < 0) {
44
+ value = 0;
45
+ }
46
+ if (value > 1) {
47
+ value = 1;
48
+ }
49
+ this._lightness = value;
50
+ }
51
+ /** gets or sets the red component
52
+ * @returns an integer between 0 and 255
53
+ */
54
+ get red() {
55
+ return this.getRGB().red;
56
+ }
57
+ set red(value) {
58
+ this.setHSL(value, this.green, this.blue);
59
+ }
60
+ /** gets or sets the green component
61
+ * @returns an integer between 0 and 255
62
+ */
63
+ get green() {
64
+ return this.getRGB().green;
65
+ }
66
+ set green(value) {
67
+ this.setHSL(this.red, value, this.blue);
68
+ }
69
+ /** gets or sets the blue component
70
+ * @returns an integer between 0 and 255
71
+ */
72
+ get blue() {
73
+ return this.getRGB().blue;
74
+ }
75
+ set blue(value) {
76
+ this.setHSL(this.red, this.green, value);
77
+ }
78
+ /** gets or sets the hex color value, expresses as 6 hexadecimal characters.
79
+ * @returns hex representation of the color
80
+ */
81
+ get hex() {
82
+ var r = this.getHex(this.red);
83
+ var g = this.getHex(this.green);
84
+ var b = this.getHex(this.blue);
85
+ return r + g + b;
86
+ }
87
+ set hex(value) {
88
+ this.red = parseInt(value.substr(0, 2));
89
+ this.green = parseInt(value.substr(2, 2));
90
+ this.blue = parseInt(value.substr(4, 2));
91
+ }
92
+ /** gets white or black color that is a good oposite to the current color
93
+ * @returns - "000000" or "FFFFFF"
94
+ */
95
+ get contrastColor() {
96
+ const brightness = (this.red * 299 + this.green * 587 + this.blue * 114) / 1000;
97
+ if (brightness > 127) {
98
+ return "000000";
99
+ }
100
+ return "FFFFFF";
101
+ }
102
+ getRGB() {
103
+ const chroma = (1 - Math.abs((2 * this._lightness) - 1)) * this.saturation;
104
+ // find the quandrant of the hue
105
+ const quadrant = this._hue / 60;
106
+ // calculate the offset from the quandrant center
107
+ const offset = chroma * (1 - Math.abs(quadrant % 2 - 1));
108
+ // Apply the chroma to the primary component and the offset to the 2nd most important component
109
+ let r = 0, g = 0, b = 0;
110
+ if (0 <= quadrant && quadrant <= 1) {
111
+ r = chroma;
112
+ g = offset; // red to yellow
113
+ }
114
+ else if (1 <= quadrant && quadrant <= 2) {
115
+ g = chroma;
116
+ r = offset; // yellow to green
117
+ }
118
+ else if (2 <= quadrant && quadrant <= 3) {
119
+ g = chroma;
120
+ b = offset; // green to cyan
121
+ }
122
+ else if (3 <= quadrant && quadrant <= 4) {
123
+ b = chroma;
124
+ g = offset; // cyan to blue
125
+ }
126
+ else if (4 <= quadrant && quadrant <= 5) {
127
+ b = chroma;
128
+ r = offset; // blue to magenta
129
+ }
130
+ else if (5 <= quadrant && quadrant <= 6) {
131
+ r = chroma;
132
+ b = offset; // magenta to red
133
+ }
134
+ // calculate the bias to add to all channels to match the lightness
135
+ const bias = this._lightness - (chroma / 2);
136
+ return {
137
+ red: Math.round((r + bias) * 255),
138
+ green: Math.round((g + bias) * 255),
139
+ blue: Math.round((b + bias) * 255)
140
+ };
141
+ }
142
+ setHSL(red, green, blue) {
143
+ // GENERAL DATA
144
+ // all math is based on values from 0 to 1
145
+ const r = red / 255, g = green / 255, b = blue / 255;
146
+ // we need to max, min and the difference between them to derive hsl
147
+ const min = Math.min(r, g, b);
148
+ const max = Math.max(r, g, b);
149
+ const diff = max - min;
150
+ let h = 0, s = 0, l = 0;
151
+ // HUE
152
+ if (diff === 0) { // neutral
153
+ h = 0;
154
+ }
155
+ else if (max === r) { // red (magenta to yellow range)
156
+ h = 60 * ((g - b) / diff);
157
+ }
158
+ else if (max === g) { // green (yellow to cyan range)
159
+ h = 60 * (2 + ((b - r) / diff));
160
+ }
161
+ else if (max === b) { // blue (cyan to magenta range)
162
+ h = 60 * (4 + ((r - g) / diff));
163
+ }
164
+ if (h < 0) {
165
+ h = h + 360;
166
+ } // ensures positive hues only
167
+ if (h > 359) {
168
+ h = 359;
169
+ } // ensures we never return 360 for simplicity since it is the same as 0
170
+ // LIGHTNESS
171
+ l = (max + min) / 2;
172
+ // SATURATION
173
+ if (max === 0 || min === 1) { // pure black or white have no saturation
174
+ s = 0;
175
+ }
176
+ else {
177
+ s = (max - l) / (Math.min(l, 1 - l));
178
+ }
179
+ this._hue = h;
180
+ this._saturation = s;
181
+ this._lightness = l;
182
+ }
183
+ getHex(value) {
184
+ var hex = value.toString(16);
185
+ if (hex.length < 2) {
186
+ hex = "0" + hex;
187
+ }
188
+ return hex;
189
+ }
190
+ }
191
+ //# sourceMappingURL=colorInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorInfo.js","sourceRoot":"","sources":["../../src/utilities/colorInfo.ts"],"names":[],"mappings":"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","sourcesContent":["/** Color utility class with hsl and rgb converters\r\n * based on math at https://en.wikipedia.org/wiki/HSL_and_HSV\r\n * @copyright Copyright (c) .NET Foundation. All rights reserved.\r\n * @license MIT \r\n */\r\n\r\nexport class ColorInfo{\r\n\r\n private _hue: number = 0;\r\n /** gets the color hue\r\n * @returns a number between 0 and 359, could contain decimals\r\n */\r\n get hue() { return this._hue; }\r\n set hue(value: number){\r\n if (value < 0) { value = 0; }\r\n if (value > 359) { value = 359; }\r\n this._hue = value;\r\n }\r\n\r\n private _saturation: number = 0;\r\n /** gets the color saturation\r\n * @returns a number between 0 and 1, could contain decimals\r\n */\r\n get saturation() { return this._saturation; }\r\n set saturation(value: number) {\r\n if (value < 0) { value = 0; }\r\n if (value > 1) { value = 1; }\r\n this._saturation = value;\r\n }\r\n\r\n private _lightness: number = 0;\r\n /** gets the color lightness\r\n * @returns a number between 0 and 1, could contain decimals\r\n */\r\n get lightness() { return this._lightness; }\r\n set lightness(value: number) {\r\n if (value < 0) { value = 0; }\r\n if (value > 1) { value = 1; }\r\n this._lightness = value;\r\n }\r\n\r\n /** gets or sets the red component \r\n * @returns an integer between 0 and 255\r\n */\r\n get red() {\r\n return this.getRGB().red;\r\n }\r\n set red(value) {\r\n this.setHSL(value, this.green, this.blue);\r\n }\r\n\r\n /** gets or sets the green component\r\n * @returns an integer between 0 and 255\r\n */\r\n get green() {\r\n return this.getRGB().green;\r\n }\r\n set green(value: number) {\r\n this.setHSL(this.red, value, this.blue);\r\n }\r\n\r\n /** gets or sets the blue component\r\n * @returns an integer between 0 and 255\r\n */\r\n get blue() {\r\n return this.getRGB().blue;\r\n }\r\n set blue(value: number) {\r\n this.setHSL(this.red, this.green, value);\r\n }\r\n\r\n /** gets or sets the hex color value, expresses as 6 hexadecimal characters.\r\n * @returns hex representation of the color\r\n */\r\n get hex() {\r\n var r = this.getHex(this.red);\r\n var g = this.getHex(this.green);\r\n var b = this.getHex(this.blue);\r\n return r + g + b;\r\n }\r\n set hex(value: string){\r\n this.red = parseInt(value.substr(0,2));\r\n this.green = parseInt(value.substr(2,2));\r\n this.blue = parseInt(value.substr(4,2));\r\n }\r\n\r\n /** gets white or black color that is a good oposite to the current color\r\n * @returns - \"000000\" or \"FFFFFF\"\r\n */\r\n get contrastColor() {\r\n const brightness = (this.red*299 + this.green*587 + this.blue*114) / 1000\r\n if (brightness > 127){\r\n return \"000000\";\r\n }\r\n return \"FFFFFF\";\r\n }\r\n\r\n private getRGB() {\r\n const chroma = (1 - Math.abs((2 * this._lightness) - 1)) * this.saturation;\r\n // find the quandrant of the hue\r\n const quadrant = this._hue / 60;\r\n // calculate the offset from the quandrant center\r\n const offset = chroma * (1 - Math.abs(quadrant % 2 - 1));\r\n\r\n // Apply the chroma to the primary component and the offset to the 2nd most important component\r\n let r = 0, g = 0, b = 0;\r\n if (0 <= quadrant && quadrant <= 1) {\r\n r = chroma; g = offset; // red to yellow\r\n } else if (1 <= quadrant && quadrant <= 2) {\r\n g = chroma; r = offset; // yellow to green\r\n } else if (2 <= quadrant && quadrant <= 3) {\r\n g = chroma; b = offset; // green to cyan\r\n } else if (3 <= quadrant && quadrant <= 4) {\r\n b = chroma; g = offset; // cyan to blue\r\n } else if (4 <= quadrant && quadrant <= 5) {\r\n b = chroma; r = offset; // blue to magenta\r\n } else if (5 <= quadrant && quadrant <= 6) {\r\n r = chroma; b = offset; // magenta to red\r\n }\r\n // calculate the bias to add to all channels to match the lightness\r\n const bias = this._lightness - (chroma / 2);\r\n\r\n return {\r\n red: Math.round((r + bias) * 255),\r\n green: Math.round((g + bias) * 255),\r\n blue: Math.round((b + bias) * 255)\r\n }\r\n }\r\n\r\n private setHSL(red: number, green: number, blue: number) {\r\n // GENERAL DATA\r\n // all math is based on values from 0 to 1\r\n const r = red/255, g = green/255, b = blue/255;\r\n // we need to max, min and the difference between them to derive hsl\r\n const min = Math.min(r, g, b);\r\n const max = Math.max(r, g, b);\r\n const diff = max - min;\r\n let h = 0, s = 0, l = 0;\r\n\r\n // HUE\r\n if (diff === 0) { // neutral\r\n h = 0;\r\n } else if (max === r) { // red (magenta to yellow range)\r\n h = 60 * ((g - b) / diff);\r\n } else if (max === g) { // green (yellow to cyan range)\r\n h = 60 * (2 + ((b - r) / diff));\r\n } else if (max === b) { // blue (cyan to magenta range)\r\n h = 60 * (4 + ((r - g) / diff));\r\n }\r\n if (h < 0) { h = h + 360} // ensures positive hues only\r\n if (h > 359) { h = 359} // ensures we never return 360 for simplicity since it is the same as 0\r\n\r\n // LIGHTNESS\r\n l = (max + min) / 2;\r\n\r\n // SATURATION\r\n if (max === 0 || min === 1) { // pure black or white have no saturation\r\n s = 0;\r\n } else {\r\n s = (max - l) / (Math.min(l, 1 - l));\r\n }\r\n\r\n this._hue = h;\r\n this._saturation = s;\r\n this._lightness = l;\r\n }\r\n\r\n private getHex(value: number){\r\n var hex = value.toString(16);\r\n if (hex.length < 2){\r\n hex = \"0\" + hex;\r\n }\r\n return hex;\r\n }\r\n} "]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Debounces a function call, see http://demo.nimius.net/debounce_throttle/ for explanation of debounce vs throttle.
3
+ * @param debounceTime How many milliseconds to debounce for.
4
+ */
5
+ export function Debounce(debounceTime = 500) {
6
+ return function (_target, _key, descriptor) {
7
+ let originalMethod = descriptor.value;
8
+ let timer = null;
9
+ descriptor.value = function (...args) {
10
+ clearTimeout(timer);
11
+ return new Promise(resolve => {
12
+ timer = setTimeout(() => {
13
+ resolve(originalMethod.apply(this, args));
14
+ }, debounceTime);
15
+ });
16
+ };
17
+ };
18
+ }
19
+ //# sourceMappingURL=debounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/utilities/debounce.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,eAAuB,GAAG;EAC/C,OAAO,UAAS,OAAY,EAAE,IAAY,EAAE,UAA8B;IAEtE,IAAI,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,UAAU,CAAC,KAAK,GAAG,UAAS,GAAG,IAAW;MACtC,YAAY,CAAC,KAAK,CAAC,CAAC;MACpB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;UACpB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC,EAAE,YAAY,CAAC,CAAC;MACrB,CAAC,CAAC,CAAA;IAEN,CAAC,CAAA;EAEL,CAAC,CAAA;AACL,CAAC","sourcesContent":["/**\r\n * Debounces a function call, see http://demo.nimius.net/debounce_throttle/ for explanation of debounce vs throttle.\r\n * @param debounceTime How many milliseconds to debounce for.\r\n */\r\nexport function Debounce(debounceTime: number = 500){\r\n return function(_target: any, _key: string, descriptor: PropertyDescriptor){\r\n\r\n let originalMethod = descriptor.value;\r\n let timer = null;\r\n\r\n descriptor.value = function(...args: any[]){\r\n clearTimeout(timer);\r\n return new Promise(resolve => {\r\n timer = setTimeout(() => {\r\n resolve(originalMethod.apply(this, args));\r\n }, debounceTime);\r\n })\r\n\r\n }\r\n \r\n }\r\n}"]}