@dnncommunity/dnn-elements 0.15.0-beta.7 → 0.15.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 (221) hide show
  1. package/dist/cjs/dnn-button_17.cjs.entry.js +1 -1
  2. package/dist/cjs/dnn-button_17.cjs.entry.js.map +1 -1
  3. package/dist/cjs/dnn.cjs.js +4 -116
  4. package/dist/cjs/dnn.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +2 -18
  6. package/dist/cjs/loader.cjs.js.map +1 -1
  7. package/dist/collection/components/dnn-tabs/dnn-tabs.css +0 -1
  8. package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js +5 -0
  9. package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js.map +1 -1
  10. package/dist/dnn/dnn.esm.js +1 -130
  11. package/dist/dnn/dnn.esm.js.map +1 -1
  12. package/dist/dnn/dnn.js +1 -1
  13. package/dist/dnn/index.esm.js +1 -46
  14. package/dist/dnn/index.esm.js.map +1 -1
  15. package/dist/dnn/{p-c222c8b7.entry.js → p-058a3145.entry.js} +2 -2
  16. package/dist/dnn/{p-c222c8b7.entry.js.map → p-058a3145.entry.js.map} +1 -1
  17. package/dist/dnn/{p-31dc68a7.system.entry.js → p-1893c229.system.entry.js} +2 -2
  18. package/dist/dnn/{p-31dc68a7.system.entry.js.map → p-1893c229.system.entry.js.map} +1 -1
  19. package/dist/dnn/p-5bcf3629.system.js +1 -1
  20. package/dist/esm/dnn-button_17.entry.js +1 -1
  21. package/dist/esm/dnn-button_17.entry.js.map +1 -1
  22. package/dist/esm/dnn.js +4 -116
  23. package/dist/esm/dnn.js.map +1 -1
  24. package/dist/esm/loader.js +2 -18
  25. package/dist/esm/loader.js.map +1 -1
  26. package/dist/esm-es5/dnn-button_17.entry.js +1 -1
  27. package/dist/esm-es5/dnn-button_17.entry.js.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/package.json +6 -3
  30. package/dist/cjs/app-globals-3a1e7e63.js +0 -7
  31. package/dist/cjs/app-globals-3a1e7e63.js.map +0 -1
  32. package/dist/cjs/css-shim-aaf4fec9.js +0 -8
  33. package/dist/cjs/css-shim-aaf4fec9.js.map +0 -1
  34. package/dist/cjs/dnn-button.cjs.entry.js +0 -92
  35. package/dist/cjs/dnn-button.cjs.entry.js.map +0 -1
  36. package/dist/cjs/dnn-checkbox.cjs.entry.js +0 -58
  37. package/dist/cjs/dnn-checkbox.cjs.entry.js.map +0 -1
  38. package/dist/cjs/dnn-chevron.cjs.entry.js +0 -34
  39. package/dist/cjs/dnn-chevron.cjs.entry.js.map +0 -1
  40. package/dist/cjs/dnn-collapsible.cjs.entry.js +0 -69
  41. package/dist/cjs/dnn-collapsible.cjs.entry.js.map +0 -1
  42. package/dist/cjs/dnn-color-picker.cjs.entry.js +0 -508
  43. package/dist/cjs/dnn-color-picker.cjs.entry.js.map +0 -1
  44. package/dist/cjs/dnn-dropzone.cjs.entry.js +0 -153
  45. package/dist/cjs/dnn-dropzone.cjs.entry.js.map +0 -1
  46. package/dist/cjs/dnn-image-cropper.cjs.entry.js +0 -408
  47. package/dist/cjs/dnn-image-cropper.cjs.entry.js.map +0 -1
  48. package/dist/cjs/dnn-modal.cjs.entry.js +0 -65
  49. package/dist/cjs/dnn-modal.cjs.entry.js.map +0 -1
  50. package/dist/cjs/dnn-permissions-grid.cjs.entry.js +0 -320
  51. package/dist/cjs/dnn-permissions-grid.cjs.entry.js.map +0 -1
  52. package/dist/cjs/dnn-searchbox.cjs.entry.js +0 -66
  53. package/dist/cjs/dnn-searchbox.cjs.entry.js.map +0 -1
  54. package/dist/cjs/dnn-sort-icon.cjs.entry.js +0 -43
  55. package/dist/cjs/dnn-sort-icon.cjs.entry.js.map +0 -1
  56. package/dist/cjs/dnn-tab.cjs.entry.js +0 -31
  57. package/dist/cjs/dnn-tab.cjs.entry.js.map +0 -1
  58. package/dist/cjs/dnn-tabs.cjs.entry.js +0 -52
  59. package/dist/cjs/dnn-tabs.cjs.entry.js.map +0 -1
  60. package/dist/cjs/dnn-toggle.cjs.entry.js +0 -37
  61. package/dist/cjs/dnn-toggle.cjs.entry.js.map +0 -1
  62. package/dist/cjs/dnn-treeview-item.cjs.entry.js +0 -68
  63. package/dist/cjs/dnn-treeview-item.cjs.entry.js.map +0 -1
  64. package/dist/cjs/dnn-vertical-overflow-menu.cjs.entry.js +0 -124
  65. package/dist/cjs/dnn-vertical-overflow-menu.cjs.entry.js.map +0 -1
  66. package/dist/cjs/dnn-vertical-splitview.cjs.entry.js +0 -133
  67. package/dist/cjs/dnn-vertical-splitview.cjs.entry.js.map +0 -1
  68. package/dist/cjs/dom-14886762.js +0 -77
  69. package/dist/cjs/dom-14886762.js.map +0 -1
  70. package/dist/cjs/index-d53702a3.js +0 -3095
  71. package/dist/cjs/index-d53702a3.js.map +0 -1
  72. package/dist/cjs/mouseUtilities-ecd5ecf7.js +0 -25
  73. package/dist/cjs/mouseUtilities-ecd5ecf7.js.map +0 -1
  74. package/dist/cjs/shadow-css-c44ea13a.js +0 -392
  75. package/dist/cjs/shadow-css-c44ea13a.js.map +0 -1
  76. package/dist/dnn/app-globals-0f993ce5.js +0 -5
  77. package/dist/dnn/app-globals-0f993ce5.js.map +0 -1
  78. package/dist/dnn/app-globals-497eb362.system.js +0 -2
  79. package/dist/dnn/app-globals-497eb362.system.js.map +0 -1
  80. package/dist/dnn/css-shim-091f949f.js +0 -6
  81. package/dist/dnn/css-shim-091f949f.js.map +0 -1
  82. package/dist/dnn/css-shim-c5bffe6b.system.js +0 -2
  83. package/dist/dnn/css-shim-c5bffe6b.system.js.map +0 -1
  84. package/dist/dnn/debounce-6be67abd.js +0 -22
  85. package/dist/dnn/debounce-6be67abd.js.map +0 -1
  86. package/dist/dnn/debounce-db438a09.system.js +0 -2
  87. package/dist/dnn/debounce-db438a09.system.js.map +0 -1
  88. package/dist/dnn/dnn-button.entry.js +0 -88
  89. package/dist/dnn/dnn-button.entry.js.map +0 -1
  90. package/dist/dnn/dnn-button.system.entry.js +0 -2
  91. package/dist/dnn/dnn-button.system.entry.js.map +0 -1
  92. package/dist/dnn/dnn-checkbox.entry.js +0 -54
  93. package/dist/dnn/dnn-checkbox.entry.js.map +0 -1
  94. package/dist/dnn/dnn-checkbox.system.entry.js +0 -2
  95. package/dist/dnn/dnn-checkbox.system.entry.js.map +0 -1
  96. package/dist/dnn/dnn-chevron.entry.js +0 -30
  97. package/dist/dnn/dnn-chevron.entry.js.map +0 -1
  98. package/dist/dnn/dnn-chevron.system.entry.js +0 -2
  99. package/dist/dnn/dnn-chevron.system.entry.js.map +0 -1
  100. package/dist/dnn/dnn-collapsible.entry.js +0 -65
  101. package/dist/dnn/dnn-collapsible.entry.js.map +0 -1
  102. package/dist/dnn/dnn-collapsible.system.entry.js +0 -2
  103. package/dist/dnn/dnn-collapsible.system.entry.js.map +0 -1
  104. package/dist/dnn/dnn-color-picker.entry.js +0 -504
  105. package/dist/dnn/dnn-color-picker.entry.js.map +0 -1
  106. package/dist/dnn/dnn-color-picker.system.entry.js +0 -12
  107. package/dist/dnn/dnn-color-picker.system.entry.js.map +0 -1
  108. package/dist/dnn/dnn-dropzone.entry.js +0 -149
  109. package/dist/dnn/dnn-dropzone.entry.js.map +0 -1
  110. package/dist/dnn/dnn-dropzone.system.entry.js +0 -2
  111. package/dist/dnn/dnn-dropzone.system.entry.js.map +0 -1
  112. package/dist/dnn/dnn-image-cropper.entry.js +0 -404
  113. package/dist/dnn/dnn-image-cropper.entry.js.map +0 -1
  114. package/dist/dnn/dnn-image-cropper.system.entry.js +0 -2
  115. package/dist/dnn/dnn-image-cropper.system.entry.js.map +0 -1
  116. package/dist/dnn/dnn-modal.entry.js +0 -61
  117. package/dist/dnn/dnn-modal.entry.js.map +0 -1
  118. package/dist/dnn/dnn-modal.system.entry.js +0 -2
  119. package/dist/dnn/dnn-modal.system.entry.js.map +0 -1
  120. package/dist/dnn/dnn-permissions-grid.entry.js +0 -316
  121. package/dist/dnn/dnn-permissions-grid.entry.js.map +0 -1
  122. package/dist/dnn/dnn-permissions-grid.system.entry.js +0 -2
  123. package/dist/dnn/dnn-permissions-grid.system.entry.js.map +0 -1
  124. package/dist/dnn/dnn-searchbox.entry.js +0 -62
  125. package/dist/dnn/dnn-searchbox.entry.js.map +0 -1
  126. package/dist/dnn/dnn-searchbox.system.entry.js +0 -2
  127. package/dist/dnn/dnn-searchbox.system.entry.js.map +0 -1
  128. package/dist/dnn/dnn-sort-icon.entry.js +0 -39
  129. package/dist/dnn/dnn-sort-icon.entry.js.map +0 -1
  130. package/dist/dnn/dnn-sort-icon.system.entry.js +0 -2
  131. package/dist/dnn/dnn-sort-icon.system.entry.js.map +0 -1
  132. package/dist/dnn/dnn-tab.entry.js +0 -27
  133. package/dist/dnn/dnn-tab.entry.js.map +0 -1
  134. package/dist/dnn/dnn-tab.system.entry.js +0 -2
  135. package/dist/dnn/dnn-tab.system.entry.js.map +0 -1
  136. package/dist/dnn/dnn-tabs.entry.js +0 -48
  137. package/dist/dnn/dnn-tabs.entry.js.map +0 -1
  138. package/dist/dnn/dnn-tabs.system.entry.js +0 -2
  139. package/dist/dnn/dnn-tabs.system.entry.js.map +0 -1
  140. package/dist/dnn/dnn-toggle.entry.js +0 -33
  141. package/dist/dnn/dnn-toggle.entry.js.map +0 -1
  142. package/dist/dnn/dnn-toggle.system.entry.js +0 -2
  143. package/dist/dnn/dnn-toggle.system.entry.js.map +0 -1
  144. package/dist/dnn/dnn-treeview-item.entry.js +0 -64
  145. package/dist/dnn/dnn-treeview-item.entry.js.map +0 -1
  146. package/dist/dnn/dnn-treeview-item.system.entry.js +0 -2
  147. package/dist/dnn/dnn-treeview-item.system.entry.js.map +0 -1
  148. package/dist/dnn/dnn-vertical-overflow-menu.entry.js +0 -120
  149. package/dist/dnn/dnn-vertical-overflow-menu.entry.js.map +0 -1
  150. package/dist/dnn/dnn-vertical-overflow-menu.system.entry.js +0 -2
  151. package/dist/dnn/dnn-vertical-overflow-menu.system.entry.js.map +0 -1
  152. package/dist/dnn/dnn-vertical-splitview.entry.js +0 -129
  153. package/dist/dnn/dnn-vertical-splitview.entry.js.map +0 -1
  154. package/dist/dnn/dnn-vertical-splitview.system.entry.js +0 -2
  155. package/dist/dnn/dnn-vertical-splitview.system.entry.js.map +0 -1
  156. package/dist/dnn/dnn.system.js +0 -2
  157. package/dist/dnn/dnn.system.js.map +0 -1
  158. package/dist/dnn/dom-99eb7b76.system.js +0 -22
  159. package/dist/dnn/dom-99eb7b76.system.js.map +0 -1
  160. package/dist/dnn/dom-a385e381.js +0 -75
  161. package/dist/dnn/dom-a385e381.js.map +0 -1
  162. package/dist/dnn/index-20e42ad7.js +0 -3059
  163. package/dist/dnn/index-20e42ad7.js.map +0 -1
  164. package/dist/dnn/index-c3cc3b5b.system.js +0 -2
  165. package/dist/dnn/index-c3cc3b5b.system.js.map +0 -1
  166. package/dist/dnn/index.system.js +0 -2
  167. package/dist/dnn/index.system.js.map +0 -1
  168. package/dist/dnn/mouseUtilities-233ad7e3.system.js +0 -2
  169. package/dist/dnn/mouseUtilities-233ad7e3.system.js.map +0 -1
  170. package/dist/dnn/mouseUtilities-b261ca4f.js +0 -23
  171. package/dist/dnn/mouseUtilities-b261ca4f.js.map +0 -1
  172. package/dist/dnn/shadow-css-27708fdd.system.js +0 -14
  173. package/dist/dnn/shadow-css-27708fdd.system.js.map +0 -1
  174. package/dist/dnn/shadow-css-ef431969.js +0 -390
  175. package/dist/dnn/shadow-css-ef431969.js.map +0 -1
  176. package/dist/esm/app-globals-0f993ce5.js +0 -5
  177. package/dist/esm/app-globals-0f993ce5.js.map +0 -1
  178. package/dist/esm/css-shim-091f949f.js +0 -6
  179. package/dist/esm/css-shim-091f949f.js.map +0 -1
  180. package/dist/esm/dnn-button.entry.js +0 -88
  181. package/dist/esm/dnn-button.entry.js.map +0 -1
  182. package/dist/esm/dnn-checkbox.entry.js +0 -54
  183. package/dist/esm/dnn-checkbox.entry.js.map +0 -1
  184. package/dist/esm/dnn-chevron.entry.js +0 -30
  185. package/dist/esm/dnn-chevron.entry.js.map +0 -1
  186. package/dist/esm/dnn-collapsible.entry.js +0 -65
  187. package/dist/esm/dnn-collapsible.entry.js.map +0 -1
  188. package/dist/esm/dnn-color-picker.entry.js +0 -504
  189. package/dist/esm/dnn-color-picker.entry.js.map +0 -1
  190. package/dist/esm/dnn-dropzone.entry.js +0 -149
  191. package/dist/esm/dnn-dropzone.entry.js.map +0 -1
  192. package/dist/esm/dnn-image-cropper.entry.js +0 -404
  193. package/dist/esm/dnn-image-cropper.entry.js.map +0 -1
  194. package/dist/esm/dnn-modal.entry.js +0 -61
  195. package/dist/esm/dnn-modal.entry.js.map +0 -1
  196. package/dist/esm/dnn-permissions-grid.entry.js +0 -316
  197. package/dist/esm/dnn-permissions-grid.entry.js.map +0 -1
  198. package/dist/esm/dnn-searchbox.entry.js +0 -62
  199. package/dist/esm/dnn-searchbox.entry.js.map +0 -1
  200. package/dist/esm/dnn-sort-icon.entry.js +0 -39
  201. package/dist/esm/dnn-sort-icon.entry.js.map +0 -1
  202. package/dist/esm/dnn-tab.entry.js +0 -27
  203. package/dist/esm/dnn-tab.entry.js.map +0 -1
  204. package/dist/esm/dnn-tabs.entry.js +0 -48
  205. package/dist/esm/dnn-tabs.entry.js.map +0 -1
  206. package/dist/esm/dnn-toggle.entry.js +0 -33
  207. package/dist/esm/dnn-toggle.entry.js.map +0 -1
  208. package/dist/esm/dnn-treeview-item.entry.js +0 -64
  209. package/dist/esm/dnn-treeview-item.entry.js.map +0 -1
  210. package/dist/esm/dnn-vertical-overflow-menu.entry.js +0 -120
  211. package/dist/esm/dnn-vertical-overflow-menu.entry.js.map +0 -1
  212. package/dist/esm/dnn-vertical-splitview.entry.js +0 -129
  213. package/dist/esm/dnn-vertical-splitview.entry.js.map +0 -1
  214. package/dist/esm/dom-a385e381.js +0 -75
  215. package/dist/esm/dom-a385e381.js.map +0 -1
  216. package/dist/esm/index-20e42ad7.js +0 -3059
  217. package/dist/esm/index-20e42ad7.js.map +0 -1
  218. package/dist/esm/mouseUtilities-b261ca4f.js +0 -23
  219. package/dist/esm/mouseUtilities-b261ca4f.js.map +0 -1
  220. package/dist/esm/shadow-css-ef431969.js +0 -390
  221. package/dist/esm/shadow-css-ef431969.js.map +0 -1
@@ -1,508 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-d53702a3.js');
6
- const debounce = require('./debounce-901e1f0c.js');
7
-
8
- /** Color utility class with hsl and rgb converters
9
- * based on math at https://en.wikipedia.org/wiki/HSL_and_HSV
10
- * @copyright Copyright (c) .NET Foundation. All rights reserved.
11
- * @license MIT
12
- */
13
- class ColorInfo {
14
- constructor() {
15
- this._hue = 0;
16
- this._saturation = 0;
17
- this._lightness = 0;
18
- }
19
- /** gets the color hue
20
- * @returns a number between 0 and 359, could contain decimals
21
- */
22
- get hue() { return this._hue; }
23
- set hue(value) {
24
- if (value < 0) {
25
- value = 0;
26
- }
27
- if (value > 359) {
28
- value = 359;
29
- }
30
- this._hue = value;
31
- }
32
- /** gets the color saturation
33
- * @returns a number between 0 and 1, could contain decimals
34
- */
35
- get saturation() { return this._saturation; }
36
- set saturation(value) {
37
- if (value < 0) {
38
- value = 0;
39
- }
40
- if (value > 1) {
41
- value = 1;
42
- }
43
- this._saturation = value;
44
- }
45
- /** gets the color lightness
46
- * @returns a number between 0 and 1, could contain decimals
47
- */
48
- get lightness() { return this._lightness; }
49
- set lightness(value) {
50
- if (value < 0) {
51
- value = 0;
52
- }
53
- if (value > 1) {
54
- value = 1;
55
- }
56
- this._lightness = value;
57
- }
58
- /** gets or sets the red component
59
- * @returns an integer between 0 and 255
60
- */
61
- get red() {
62
- return this.getRGB().red;
63
- }
64
- set red(value) {
65
- this.setHSL(value, this.green, this.blue);
66
- }
67
- /** gets or sets the green component
68
- * @returns an integer between 0 and 255
69
- */
70
- get green() {
71
- return this.getRGB().green;
72
- }
73
- set green(value) {
74
- this.setHSL(this.red, value, this.blue);
75
- }
76
- /** gets or sets the blue component
77
- * @returns an integer between 0 and 255
78
- */
79
- get blue() {
80
- return this.getRGB().blue;
81
- }
82
- set blue(value) {
83
- this.setHSL(this.red, this.green, value);
84
- }
85
- /** gets or sets the hex color value, expresses as 6 hexadecimal characters.
86
- * @returns hex representation of the color
87
- */
88
- get hex() {
89
- var r = this.getHex(this.red);
90
- var g = this.getHex(this.green);
91
- var b = this.getHex(this.blue);
92
- return r + g + b;
93
- }
94
- set hex(value) {
95
- this.red = parseInt(value.substr(0, 2));
96
- this.green = parseInt(value.substr(2, 2));
97
- this.blue = parseInt(value.substr(4, 2));
98
- }
99
- /** gets white or black color that is a good oposite to the current color
100
- * @returns - "000000" or "FFFFFF"
101
- */
102
- get contrastColor() {
103
- const brightness = (this.red * 299 + this.green * 587 + this.blue * 114) / 1000;
104
- if (brightness > 127) {
105
- return "000000";
106
- }
107
- return "FFFFFF";
108
- }
109
- getRGB() {
110
- const chroma = (1 - Math.abs((2 * this._lightness) - 1)) * this.saturation;
111
- // find the quandrant of the hue
112
- const quadrant = this._hue / 60;
113
- // calculate the offset from the quandrant center
114
- const offset = chroma * (1 - Math.abs(quadrant % 2 - 1));
115
- // Apply the chroma to the primary component and the offset to the 2nd most important component
116
- let r = 0, g = 0, b = 0;
117
- if (0 <= quadrant && quadrant <= 1) {
118
- r = chroma;
119
- g = offset; // red to yellow
120
- }
121
- else if (1 <= quadrant && quadrant <= 2) {
122
- g = chroma;
123
- r = offset; // yellow to green
124
- }
125
- else if (2 <= quadrant && quadrant <= 3) {
126
- g = chroma;
127
- b = offset; // green to cyan
128
- }
129
- else if (3 <= quadrant && quadrant <= 4) {
130
- b = chroma;
131
- g = offset; // cyan to blue
132
- }
133
- else if (4 <= quadrant && quadrant <= 5) {
134
- b = chroma;
135
- r = offset; // blue to magenta
136
- }
137
- else if (5 <= quadrant && quadrant <= 6) {
138
- r = chroma;
139
- b = offset; // magenta to red
140
- }
141
- // calculate the bias to add to all channels to match the lightness
142
- const bias = this._lightness - (chroma / 2);
143
- return {
144
- red: Math.round((r + bias) * 255),
145
- green: Math.round((g + bias) * 255),
146
- blue: Math.round((b + bias) * 255)
147
- };
148
- }
149
- setHSL(red, green, blue) {
150
- // GENERAL DATA
151
- // all math is based on values from 0 to 1
152
- const r = red / 255, g = green / 255, b = blue / 255;
153
- // we need to max, min and the difference between them to derive hsl
154
- const min = Math.min(r, g, b);
155
- const max = Math.max(r, g, b);
156
- const diff = max - min;
157
- let h = 0, s = 0, l = 0;
158
- // HUE
159
- if (diff === 0) { // neutral
160
- h = 0;
161
- }
162
- else if (max === r) { // red (magenta to yellow range)
163
- h = 60 * ((g - b) / diff);
164
- }
165
- else if (max === g) { // green (yellow to cyan range)
166
- h = 60 * (2 + ((b - r) / diff));
167
- }
168
- else if (max === b) { // blue (cyan to magenta range)
169
- h = 60 * (4 + ((r - g) / diff));
170
- }
171
- if (h < 0) {
172
- h = h + 360;
173
- } // ensures positive hues only
174
- if (h > 359) {
175
- h = 359;
176
- } // ensures we never return 360 for simplicity since it is the same as 0
177
- // LIGHTNESS
178
- l = (max + min) / 2;
179
- // SATURATION
180
- if (max === 0 || min === 1) { // pure black or white have no saturation
181
- s = 0;
182
- }
183
- else {
184
- s = (max - l) / (Math.min(l, 1 - l));
185
- }
186
- this._hue = h;
187
- this._saturation = s;
188
- this._lightness = l;
189
- }
190
- getHex(value) {
191
- var hex = value.toString(16);
192
- if (hex.length < 2) {
193
- hex = "0" + hex;
194
- }
195
- return hex;
196
- }
197
- }
198
-
199
- const dnnColorPickerCss = ".dnn-color-picker{padding:15px;max-width:400px}.dnn-color-picker .dnn-color-sliders{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:200px}.dnn-color-picker .dnn-color-sliders .dnn-color-s-b{border:1px solid #ccc;padding-bottom:var(--color-box-height, 50%);position:relative;background-color:red}.dnn-color-picker .dnn-color-sliders .dnn-color-s-b:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:-webkit-gradient(linear, left top, right top, from(white), to(red));background:linear-gradient(to right, white, red);mix-blend-mode:saturation}.dnn-color-picker .dnn-color-sliders .dnn-color-s-b:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;z-index:2;background:-webkit-gradient(linear, left top, left bottom, from(white), to(black));background:linear-gradient(to bottom, white, black);mix-blend-mode:luminosity}.dnn-color-picker .dnn-color-sliders .dnn-color-s-b button{position:absolute;bottom:calc(50% - 4px);left:calc(50% - 4px);width:8px;height:8px;z-index:3;display:block;background:none;border:none;margin-left:-4px;margin-bottom:-4px;padding:7px;background-color:#fff;border-radius:50%}.dnn-color-picker .dnn-color-sliders .dnn-color-s-b button:before{content:\"\";position:absolute;top:-1px;left:-1px;border-radius:50%}.dnn-color-picker .dnn-color-sliders .dnn-color-s-b button:after{content:\"\";position:absolute;top:0px;left:0px;border-radius:50%;width:10px;height:10px;border:2px solid #ccc}.dnn-color-picker .dnn-color-sliders .dnn-color-bar{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-top:15px}.dnn-color-picker .dnn-color-sliders .dnn-color-bar .dnn-color-result{-ms-flex-direction:column;flex-direction:column;width:50px;height:50px;border-radius:50%;background:red}.dnn-color-picker .dnn-color-sliders .dnn-color-bar .dnn-color-hue{-ms-flex:auto;flex:auto;margin-left:10px;height:16px;border:1px solid #ccc;position:relative;background:-webkit-gradient(linear, left top, right top, color-stop(0, #f00), color-stop(17%, #ff0), color-stop(33%, #0f0), color-stop(50%, #0ff), color-stop(67%, #00f), color-stop(84%, #f0f), to(#f00));background:linear-gradient(to right, #f00 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 84%, #f00 100%)}.dnn-color-picker .dnn-color-sliders .dnn-color-bar .dnn-color-hue button{width:10px;height:20px;position:absolute;top:-2px;left:calc(50% - 4px);border:0;padding:0;background-color:transparent;padding-left:-8px}.dnn-color-picker .dnn-color-sliders .dnn-color-bar .dnn-color-hue button:before{content:\"\";position:absolute;top:-2px;left:0px;border-radius:3px;width:100%;height:100%;border:1px solid #ccc;background-color:#fff}.dnn-color-picker .dnn-color-fields{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between}.dnn-color-picker .dnn-color-fields .dnn-color-mode-switch{display:-ms-flexbox;display:flex;-ms-flex-align:end;align-items:flex-end;padding:0.5em}.dnn-color-picker .dnn-color-fields .dnn-color-mode-switch button{background-color:transparent;border:none}.dnn-color-picker .dnn-color-fields .dnn-color-mode-switch button svg{width:3em;height:3em;pointer-events:none;outline:none}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields{display:-ms-flexbox;display:flex;-ms-flex-pack:space-evenly;justify-content:space-evenly}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields .dnn-rgb-color-field{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:auto;flex:auto;text-align:center;padding:0.5em}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields .dnn-rgb-color-field label{padding-bottom:0.25em}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields .dnn-rgb-color-field input{border-radius:var(--dnn-button-radius, 3px);border:1px solid #ccc;padding:0.5em;padding-left:1.3em;text-align:center}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields .dnn-rgb-color-field input.red{border-color:red}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields .dnn-rgb-color-field input.green{border-color:green}.dnn-color-picker .dnn-color-fields .dnn-rgb-color-fields .dnn-rgb-color-field input.blue{border-color:blue}.dnn-color-picker .dnn-color-fields .dnn-hsl-color-fields{display:-ms-flexbox;display:flex;-ms-flex-pack:space-evenly;justify-content:space-evenly}.dnn-color-picker .dnn-color-fields .dnn-hsl-color-fields .dnn-hsl-color-field{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:auto;flex:auto;text-align:center;padding:0.5em}.dnn-color-picker .dnn-color-fields .dnn-hsl-color-fields .dnn-hsl-color-field label{padding-bottom:0.25em}.dnn-color-picker .dnn-color-fields .dnn-hsl-color-fields .dnn-hsl-color-field input{border-radius:var(--dnn-button-radius, 3px);border:1px solid #ccc;padding:0.5em;padding-left:1.3em;text-align:center}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields{display:-ms-flexbox;display:flex;-ms-flex-pack:space-evenly;justify-content:space-evenly}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields .dnn-hex-color-field{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:auto;flex:auto;text-align:center;padding:0.5em}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields .dnn-hex-color-field label{padding-bottom:0.25em}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields .dnn-hex-color-field .hex-input{position:relative;border-radius:var(--dnn-button-radius, 3px);border:1px solid #ccc;padding:0.323em;text-align:center}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields .dnn-hex-color-field .hex-input input{border:0;padding:0;margin:0;width:100%;height:100%;text-align:center}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields .dnn-hex-color-field .hex-input button{position:absolute;height:100%;top:0;right:1em;background-color:transparent;border:0;padding:0;margin:0}.dnn-color-picker .dnn-color-fields .dnn-hex-color-fields .dnn-hex-color-field .hex-input button svg{min-width:1em}";
200
-
201
- /** Reusable DNN UI component to pick a color
202
- * @copyright Copyright (c) .NET Foundation. All rights reserved.
203
- * @license MIT
204
- */
205
- var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
206
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
207
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
208
- r = Reflect.decorate(decorators, target, key, desc);
209
- else
210
- for (var i = decorators.length - 1; i >= 0; i--)
211
- if (d = decorators[i])
212
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
213
- return c > 3 && r && Object.defineProperty(target, key, r), r;
214
- };
215
- const DnnColorPicker = class {
216
- constructor(hostRef) {
217
- index.registerInstance(this, hostRef);
218
- this.colorChanged = index.createEvent(this, "colorChanged", 7);
219
- /** Sets the initial color, must be a valid 8 character hexadecimal string without the # sign. */
220
- this.color = "FFFFFF";
221
- /** Sets the width-height ratio of the color picker saturation-lightness box.
222
- * @example 100% renders a perfect square
223
- */
224
- this.colorBoxHeight = "50%";
225
- this.rgbDisplay = "flex";
226
- this.hslDisplay = "none";
227
- this.hexDisplay = "none";
228
- this.handleSaturationLightnessMouseDown = (e) => {
229
- e.preventDefault();
230
- this.handleDragLightnessSaturation(e);
231
- window.addEventListener('mousemove', this.handleDragLightnessSaturation);
232
- window.addEventListener('mouseup', this.handleSaturationLightnessMouseUp);
233
- };
234
- this.handleDragLightnessSaturation = (e) => {
235
- const rect = this.saturationLightnessBox.getBoundingClientRect();
236
- let x = e.clientX - rect.left;
237
- if (x < 0) {
238
- x = 0;
239
- }
240
- if (x > rect.width) {
241
- x = rect.width;
242
- }
243
- x = x / rect.width;
244
- let y = e.clientY - rect.top;
245
- if (y < 0) {
246
- y = 0;
247
- }
248
- if (y > rect.height) {
249
- y = rect.height;
250
- }
251
- y = 1 - (y / rect.height);
252
- const newColor = new ColorInfo();
253
- newColor.hue = this.currentColor.hue;
254
- newColor.saturation = x;
255
- newColor.lightness = y;
256
- this.currentColor = newColor;
257
- };
258
- this.handleSaturationLightnessMouseUp = () => {
259
- window.removeEventListener('mousemove', this.handleDragLightnessSaturation);
260
- window.removeEventListener('mouseup', this.handleSaturationLightnessMouseUp);
261
- };
262
- this.handleHueMouseDown = (e) => {
263
- e.preventDefault();
264
- this.handleDragHue(e);
265
- window.addEventListener('mousemove', this.handleDragHue);
266
- window.addEventListener('mouseup', this.handleHueMouseUp);
267
- };
268
- this.handleHueMouseUp = () => {
269
- window.removeEventListener('mousemove', this.handleDragHue);
270
- window.removeEventListener('mouseup', this.handleHueMouseUp);
271
- };
272
- this.handleDragHue = (e) => {
273
- const rect = this.hueRange.getBoundingClientRect();
274
- let x = e.clientX - rect.left;
275
- if (x < 0) {
276
- x = 0;
277
- }
278
- if (x > rect.width) {
279
- x = rect.width;
280
- }
281
- x = x / rect.width * 360;
282
- const newColor = new ColorInfo();
283
- newColor.hue = x;
284
- newColor.saturation = this.currentColor.saturation;
285
- newColor.lightness = this.currentColor.lightness;
286
- this.currentColor = newColor;
287
- };
288
- this.handleComponentValueChange = (e, channel) => {
289
- let value = parseInt(e.target.value);
290
- if (isNaN(value)) {
291
- return;
292
- }
293
- const newColor = new ColorInfo();
294
- if (value < 0) {
295
- value = 0;
296
- }
297
- if (value > 255) {
298
- value = 255;
299
- }
300
- let r = this.currentColor.red;
301
- let g = this.currentColor.green;
302
- let b = this.currentColor.blue;
303
- switch (channel) {
304
- case 'red':
305
- r = value;
306
- break;
307
- case 'green':
308
- g = value;
309
- break;
310
- case 'blue':
311
- b = value;
312
- break;
313
- default:
314
- break;
315
- }
316
- newColor.green = g;
317
- newColor.red = r;
318
- newColor.blue = b;
319
- this.currentColor = newColor;
320
- };
321
- this.handleHSLChange = (e, component) => {
322
- let value = parseInt(e.target.value);
323
- if (isNaN(value)) {
324
- return;
325
- }
326
- const newColor = new ColorInfo();
327
- if (value != null) {
328
- let h = this.currentColor.hue;
329
- let s = this.currentColor.saturation;
330
- let l = this.currentColor.lightness;
331
- switch (component) {
332
- case "hue":
333
- if (value < 0) {
334
- value = 0;
335
- }
336
- if (value > 359) {
337
- value = 0;
338
- }
339
- h = value;
340
- break;
341
- case "saturation":
342
- if (value < 0) {
343
- value = 0;
344
- }
345
- if (value > 100) {
346
- value = 100;
347
- }
348
- s = value / 100;
349
- break;
350
- case "lightness":
351
- if (value < 0) {
352
- value = 0;
353
- }
354
- if (value > 100) {
355
- value = 100;
356
- }
357
- l = value / 100;
358
- break;
359
- default:
360
- break;
361
- }
362
- newColor.hue = h;
363
- newColor.saturation = s;
364
- newColor.lightness = l;
365
- this.currentColor = newColor;
366
- }
367
- };
368
- this.handleSaturationLightnessKeyDown = (e) => {
369
- let newColor = new ColorInfo();
370
- newColor.hue = this.currentColor.hue;
371
- newColor.saturation = this.currentColor.saturation;
372
- newColor.lightness = this.currentColor.lightness;
373
- let value = 0.01;
374
- if (e.shiftKey) {
375
- value = 0.1;
376
- }
377
- switch (e.key) {
378
- case "ArrowUp":
379
- newColor.lightness += value;
380
- break;
381
- case "ArrowDown":
382
- newColor.lightness -= value;
383
- break;
384
- case "ArrowLeft":
385
- newColor.saturation -= value;
386
- break;
387
- case "ArrowRight":
388
- newColor.saturation += value;
389
- default:
390
- break;
391
- }
392
- this.currentColor = newColor;
393
- };
394
- this.handleHueKeyDown = (e) => {
395
- let newColor = new ColorInfo();
396
- newColor.hue = this.currentColor.hue;
397
- newColor.saturation = this.currentColor.saturation;
398
- newColor.lightness = this.currentColor.lightness;
399
- let value = 1;
400
- if (e.shiftKey) {
401
- value = 10;
402
- }
403
- switch (e.key) {
404
- case "ArrowLeft":
405
- newColor.hue -= value;
406
- break;
407
- case "ArrowRight":
408
- newColor.hue += value;
409
- default:
410
- break;
411
- }
412
- this.currentColor = newColor;
413
- };
414
- }
415
- colorChangedHandler(color) {
416
- this.colorChanged.emit(color);
417
- }
418
- handeCurrentColorChanged(newValue) {
419
- this.colorChangedHandler(newValue);
420
- }
421
- componentWillLoad() {
422
- this.handleHexChange(this.color);
423
- }
424
- componentDidLoad() {
425
- this.el.style.setProperty("--color-box-height", this.colorBoxHeight.toString());
426
- }
427
- getHex() {
428
- return this.getDoublet(this.currentColor.red) + this.getDoublet(this.currentColor.green) + this.getDoublet(this.currentColor.blue);
429
- }
430
- getContrast() {
431
- return this.currentColor.contrastColor;
432
- }
433
- getDoublet(value) {
434
- const valueString = value.toString(16).toUpperCase();
435
- if (valueString.length === 1) {
436
- return '0' + valueString;
437
- }
438
- return valueString;
439
- }
440
- handleHexChange(value) {
441
- const newColor = new ColorInfo();
442
- if (value.match(/^(?:[\da-f]{3}|[\da-f]{6})$/i).length > 0) {
443
- if (value.length === 3) {
444
- let expanded = value[0] + value[0] + value[1] + value[1] + value[2] + value[2];
445
- value = expanded;
446
- }
447
- newColor.red = parseInt(value.substr(0, 2), 16);
448
- newColor.green = parseInt(value.substr(2, 2), 16);
449
- newColor.blue = parseInt(value.substr(4, 2), 16);
450
- }
451
- else {
452
- newColor.red = this.currentColor.red;
453
- newColor.green = this.currentColor.green;
454
- newColor.blue = this.currentColor.blue;
455
- }
456
- this.currentColor = newColor;
457
- }
458
- switchColorMode(e) {
459
- switch (e.target.id) {
460
- case "rgb-switch":
461
- this.rgbDisplay = "none";
462
- this.hslDisplay = "none";
463
- this.hexDisplay = "flex";
464
- break;
465
- case "hex-switch":
466
- this.rgbDisplay = "none";
467
- this.hslDisplay = "flex";
468
- this.hexDisplay = "none";
469
- break;
470
- case "hsl-switch":
471
- this.rgbDisplay = "flex";
472
- this.hslDisplay = "none";
473
- this.hexDisplay = "none";
474
- break;
475
- default:
476
- this.rgbDisplay = "flex";
477
- this.hslDisplay = "none";
478
- this.hexDisplay = "none";
479
- }
480
- }
481
- render() {
482
- const hue = this.currentColor.hue;
483
- const saturation = this.currentColor.saturation;
484
- const lightness = this.currentColor.lightness;
485
- const red = this.currentColor.red;
486
- const green = this.currentColor.green;
487
- const blue = this.currentColor.blue;
488
- return (index.h("div", { class: "dnn-color-picker" }, index.h("div", { class: "dnn-color-sliders" }, index.h("div", { class: "dnn-color-s-b", ref: (element) => this.saturationLightnessBox = element, style: { backgroundColor: `hsl(${hue},100%,50%)` }, onMouseDown: this.handleSaturationLightnessMouseDown.bind(this) }, index.h("button", { class: "dnn-s-b-picker", "aria-label": "Press up or down to adjust lightness, left or right to adjust saturation, hold shift to move by 10%", role: "slider", "aria-valuemin": "0", "aria-valuemax": "100", "aria-valuetext": `Saturation: ${Math.round(this.currentColor.saturation * 100)}%, Lightness: ${Math.round(this.currentColor.lightness * 100)}%`, style: {
489
- left: Math.round(saturation * 100) + "%",
490
- bottom: Math.round(lightness * 100) + "%"
491
- }, onKeyDown: (e) => this.handleSaturationLightnessKeyDown(e) })), index.h("div", { class: "dnn-color-bar" }, index.h("div", { class: "dnn-color-result", style: {
492
- backgroundColor: '#' + this.getHex(),
493
- boxShadow: "0 0 2px 1px " + "#" + this.getContrast()
494
- } }), index.h("div", { class: "dnn-color-hue", ref: (element) => this.hueRange = element, onMouseDown: this.handleHueMouseDown.bind(this) }, index.h("button", { class: "dnn-hue-picker", "aria-label": "Press left or right to adjust hue, hold shift to move by 10 degrees", role: "slider", "aria-valuemin": "0", "aria-valuemax": "359", "aria-valuenow": Math.round(hue), style: { left: (hue / 359 * 100).toString() + "%" }, onKeyDown: (e) => this.handleHueKeyDown(e) })))), index.h("div", { class: "dnn-color-fields" }, index.h("div", { class: "dnn-rgb-color-fields", style: { display: this.rgbDisplay } }, index.h("div", { class: "dnn-rgb-color-field" }, index.h("label", null, "R"), index.h("input", { type: "number", min: "0", max: "255", step: "1", class: "red", value: red, "aria-label": "red value", onChange: (e) => this.handleComponentValueChange(e, 'red') })), index.h("div", { class: "dnn-rgb-color-field" }, index.h("label", null, "G"), index.h("input", { type: "number", min: "0", max: "255", class: "green", value: green, "aria-label": "green value", onChange: (e) => this.handleComponentValueChange(e, 'green') })), index.h("div", { class: "dnn-rgb-color-field" }, index.h("label", null, "B"), index.h("input", { type: "number", min: "0", max: "255", class: "blue", value: blue, "aria-label": "blue value", onChange: (e) => this.handleComponentValueChange(e, 'blue') })), index.h("div", { class: "dnn-color-mode-switch" }, index.h("button", { id: "rgb-switch", onClick: this.switchColorMode.bind(this), "aria-label": "switch to hexadecimal value entry" }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("path", { d: "M0 0h24v24H0z", fill: "none" }), index.h("path", { d: "M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z" }))))), index.h("div", { class: "dnn-hsl-color-fields", style: { display: this.hslDisplay } }, index.h("div", { class: "dnn-hsl-color-field" }, index.h("label", null, "H"), index.h("input", { type: "number", min: "0", max: "359", step: 1, value: Math.round(hue), "aria-label": "Hue", onChange: (e) => this.handleHSLChange(e, 'hue') })), index.h("div", { class: "dnn-hsl-color-field" }, index.h("label", null, "S"), index.h("input", { type: "number", min: "0", max: "100", step: 1, value: Math.round(saturation * 100), "aria-label": "Saturation", onChange: (e) => this.handleHSLChange(e, 'saturation') })), index.h("div", { class: "dnn-hsl-color-field" }, index.h("label", null, "L"), index.h("input", { type: "number", min: "0", max: "100", step: 1, value: Math.round(lightness * 100), "aria-label": "Lightness", onChange: (e) => this.handleHSLChange(e, 'lightness') })), index.h("div", { class: "dnn-color-mode-switch" }, index.h("button", { id: "hsl-switch", onClick: this.switchColorMode.bind(this), "aria-label": "Switch to red, green, blue entry mode" }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("path", { d: "M0 0h24v24H0z", fill: "none" }), index.h("path", { d: "M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z" }))))), index.h("div", { class: "dnn-hex-color-fields", style: { display: this.hexDisplay } }, index.h("div", { class: "dnn-hex-color-field" }, index.h("label", null, "HEX"), index.h("div", { class: "hex-input" }, index.h("input", { type: "text", "aria-label": "Hexadecimal value", value: this.getHex(), onChange: e => this.handleHexChange(e.target.value) }), index.h("button", { class: "copy", "aria-label": "copy value" }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("path", { d: "M0 0h24v24H0z", fill: "none" }), index.h("path", { d: "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" }))))), index.h("div", { class: "dnn-color-mode-switch" }, index.h("button", { id: "hex-switch", onClick: this.switchColorMode.bind(this), "aria-label": "Switch to hue saturation lightness values" }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", height: "24px", viewBox: "0 0 24 24", width: "24px", fill: "#000000" }, index.h("path", { d: "M0 0h24v24H0z", fill: "none" }), index.h("path", { d: "M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z" }))))))));
495
- }
496
- get el() { return index.getElement(this); }
497
- static get watchers() { return {
498
- "currentColor": ["handeCurrentColorChanged"]
499
- }; }
500
- };
501
- __decorate([
502
- debounce.Debounce(100)
503
- ], DnnColorPicker.prototype, "colorChangedHandler", null);
504
- DnnColorPicker.style = dnnColorPickerCss;
505
-
506
- exports.dnn_color_picker = DnnColorPicker;
507
-
508
- //# sourceMappingURL=dnn-color-picker.cjs.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"dnn-color-picker.entry.cjs.js","mappings":"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","names":["h","Debounce"],"sources":["./src/utilities/colorInfo.ts","./src/components/dnn-color-picker/dnn-color-picker.scss?tag=dnn-color-picker&encapsulation=shadow","./src/components/dnn-color-picker/dnn-color-picker.tsx"],"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} ",".dnn-color-picker{\r\n padding: 15px;\r\n max-width: 400px;\r\n .dnn-color-sliders{\r\n display:flex;\r\n flex-direction: column;\r\n min-width: 200px;\r\n .dnn-color-s-b{\r\n border: 1px solid #ccc;\r\n padding-bottom: var(--color-box-height, 50%);\r\n position: relative;\r\n background-color: red;\r\n &:before{\r\n content: '';\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height:100%;\r\n z-index:1;\r\n background: linear-gradient(to right, white, red);\r\n mix-blend-mode: saturation;\r\n }\r\n &:after{\r\n content: '';\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height:100%;\r\n z-index:2;\r\n background: linear-gradient(to bottom, white, black);\r\n mix-blend-mode: luminosity;\r\n }\r\n button{\r\n position: absolute;\r\n bottom: calc(50% - 4px);\r\n left: calc(50% - 4px);\r\n width: 8px;\r\n height: 8px;\r\n z-index: 3;\r\n display: block;\r\n background: none;\r\n border: none;\r\n margin-left: -4px;\r\n margin-bottom: -4px;\r\n padding: 7px;\r\n background-color: #fff;\r\n border-radius: 50%;\r\n &:before{\r\n content:'';\r\n position: absolute;\r\n top: -1px;\r\n left: -1px;\r\n border-radius: 50%;\r\n }\r\n &:after{\r\n content:'';\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n border-radius: 50%;\r\n width: 10px;\r\n height: 10px;\r\n border: 2px solid #ccc;\r\n }\r\n } \r\n }\r\n .dnn-color-bar {\r\n display: flex;\r\n align-items: center;\r\n margin-top: 15px;\r\n .dnn-color-result {\r\n flex-direction: column;\r\n width: 50px;\r\n height: 50px;\r\n border-radius: 50%;\r\n background: red;\r\n }\r\n .dnn-color-hue{\r\n flex: auto;\r\n margin-left: 10px;\r\n height: 16px;\r\n border: 1px solid #ccc;\r\n position: relative;\r\n background: linear-gradient(\r\n to right, \r\n #f00 0, \r\n #ff0 17%,\r\n #0f0 33%,\r\n #0ff 50%,\r\n #00f 67%,\r\n #f0f 84%,\r\n #f00 100%\r\n );\r\n button{\r\n width: 10px;\r\n height: 20px;\r\n position: absolute;\r\n top: -2px;\r\n left: calc(50% - 4px);\r\n border: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n padding-left: -8px;\r\n &:before{\r\n content:'';\r\n position: absolute;\r\n top: -2px;\r\n left: 0px;\r\n border-radius: 3px;\r\n width: 100%;\r\n height: 100%;\r\n border: 1px solid #ccc;\r\n background-color: #fff;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n .dnn-color-fields{\r\n display:flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n .dnn-color-mode-switch {\r\n display: flex;\r\n align-items: flex-end;\r\n padding: .5em;\r\n button {\r\n background-color: transparent;\r\n border: none;\r\n svg {\r\n width: 3em;\r\n height: 3em;\r\n pointer-events: none;\r\n outline: none;\r\n }\r\n }\r\n }\r\n .dnn-rgb-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-rgb-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n input{\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.5em;\r\n padding-left: 1.3em;\r\n text-align: center;\r\n &.red{\r\n border-color: red;\r\n }\r\n &.green{\r\n border-color: green; \r\n }\r\n &.blue{\r\n border-color: blue;\r\n } \r\n }\r\n }\r\n }\r\n .dnn-hsl-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-hsl-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n input{\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.5em;\r\n padding-left: 1.3em;\r\n text-align: center;\r\n }\r\n }\r\n }\r\n .dnn-hex-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-hex-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n .hex-input{\r\n position: relative;\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.323em;\r\n text-align: center;\r\n input{\r\n border:0;\r\n padding:0;\r\n margin:0;\r\n width:100%;\r\n height:100%;\r\n text-align:center;\r\n }\r\n button{\r\n position: absolute;\r\n height: 100%;\r\n top: 0;\r\n right: 1em;\r\n background-color: transparent;\r\n border:0;\r\n padding:0;\r\n margin:0;\r\n svg{\r\n min-width: 1em;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n} ","/** Reusable DNN UI component to pick a color\r\n * @copyright Copyright (c) .NET Foundation. All rights reserved.\r\n * @license MIT \r\n */\r\n\r\nimport { Component, h, State, Element, Prop, EventEmitter, Event, Watch } from \"@stencil/core\";\r\nimport { ColorInfo } from '../../utilities/colorInfo';\r\nimport { Debounce } from \"../../utilities/debounce\";\r\n\r\n/** Color Picker for Dnn */\r\n@Component({\r\n tag: 'dnn-color-picker',\r\n styleUrl: 'dnn-color-picker.scss',\r\n shadow: true\r\n})\r\nexport class DnnColorPicker {\r\n\r\n @Element() el: HTMLDnnColorPickerElement;\r\n\r\n /** Sets the initial color, must be a valid 8 character hexadecimal string without the # sign. */\r\n @Prop() color: string = \"FFFFFF\";\r\n\r\n /** Sets the width-height ratio of the color picker saturation-lightness box.\r\n * @example 100% renders a perfect square\r\n */\r\n @Prop() colorBoxHeight: string = \"50%\";\r\n \r\n @State() currentColor: ColorInfo;\r\n @State() rgbDisplay: string = \"flex\";\r\n @State() hslDisplay: string = \"none\";\r\n @State() hexDisplay: string = \"none\";\r\n\r\n /** Fires up when the color is changed and emits a ColorInfo object\r\n * @see ../../utilities/colorInfo.ts\r\n */\r\n @Event() colorChanged: EventEmitter<ColorInfo>;\r\n\r\n @Debounce(100)\r\n private colorChangedHandler(color: ColorInfo) {\r\n this.colorChanged.emit(color);\r\n }\r\n\r\n @Watch(\"currentColor\")\r\n handeCurrentColorChanged(newValue: ColorInfo){\r\n this.colorChangedHandler(newValue);\r\n }\r\n \r\n private saturationLightnessBox?: HTMLDivElement;\r\n private hueRange?: HTMLDivElement;\r\n\r\n\r\n componentWillLoad() {\r\n this.handleHexChange(this.color);\r\n }\r\n\r\n componentDidLoad() {\r\n (this.el as unknown as HTMLElement).style.setProperty(\"--color-box-height\", this.colorBoxHeight.toString());\r\n }\r\n \r\n private getHex() {\r\n return this.getDoublet(this.currentColor.red) + this.getDoublet(this.currentColor.green) + this.getDoublet(this.currentColor.blue);\r\n }\r\n\r\n private getContrast() {\r\n return this.currentColor.contrastColor;\r\n }\r\n\r\n private getDoublet(value: number){\r\n const valueString = value.toString(16).toUpperCase();\r\n if (valueString.length === 1){\r\n return '0' + valueString;\r\n }\r\n return valueString;\r\n }\r\n\r\n private handleSaturationLightnessMouseDown = (e) => {\r\n e.preventDefault();\r\n this.handleDragLightnessSaturation(e);\r\n window.addEventListener('mousemove', this.handleDragLightnessSaturation);\r\n window.addEventListener('mouseup', this.handleSaturationLightnessMouseUp);\r\n }\r\n\r\n private handleDragLightnessSaturation = (e) => {\r\n const rect = this.saturationLightnessBox.getBoundingClientRect(); \r\n\r\n let x = e.clientX - rect.left; \r\n if (x < 0) { x = 0}\r\n if (x > rect.width) { x = rect.width}\r\n x = x/rect.width;\r\n\r\n let y = e.clientY - rect.top;\r\n if (y < 0) { y = 0}\r\n if (y > rect.height) { y = rect.height}\r\n y = 1 - (y/rect.height);\r\n\r\n const newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = x;\r\n newColor.lightness = y;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleSaturationLightnessMouseUp = () => {\r\n window.removeEventListener('mousemove', this.handleDragLightnessSaturation);\r\n window.removeEventListener('mouseup', this.handleSaturationLightnessMouseUp);\r\n }\r\n\r\n private handleHueMouseDown = (e) => {\r\n e.preventDefault();\r\n this.handleDragHue(e);\r\n window.addEventListener('mousemove', this.handleDragHue);\r\n window.addEventListener('mouseup', this.handleHueMouseUp); \r\n }\r\n\r\n private handleHueMouseUp = () => {\r\n window.removeEventListener('mousemove', this.handleDragHue);\r\n window.removeEventListener('mouseup', this.handleHueMouseUp); \r\n }\r\n\r\n private handleDragHue = (e) => {\r\n const rect = this.hueRange.getBoundingClientRect(); \r\n\r\n let x = e.clientX - rect.left;\r\n if (x < 0) { x = 0}\r\n if (x > rect.width) { x = rect.width}\r\n x = x/rect.width*360; \r\n\r\n const newColor = new ColorInfo();\r\n newColor.hue = x;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleComponentValueChange = (e, channel) => {\r\n let value = parseInt(e.target.value);\r\n if (isNaN(value)) { return }\r\n const newColor = new ColorInfo();\r\n if (value < 0) { value = 0; }\r\n if (value > 255) { value = 255; }\r\n let r = this.currentColor.red;\r\n let g = this.currentColor.green;\r\n let b = this.currentColor.blue;\r\n switch (channel) {\r\n case 'red':\r\n r = value;\r\n break;\r\n case 'green':\r\n g = value;\r\n break;\r\n case 'blue':\r\n b = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n newColor.green = g;\r\n newColor.red = r;\r\n newColor.blue = b;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleHSLChange = (e, component) => { \r\n let value = parseInt(e.target.value);\r\n if (isNaN(value)) {return}\r\n const newColor = new ColorInfo();\r\n if (value != null) { \r\n let h = this.currentColor.hue;\r\n let s = this.currentColor.saturation;\r\n let l = this.currentColor.lightness;\r\n switch (component) {\r\n case \"hue\":\r\n if (value < 0) { value = 0}\r\n if (value > 359) { value = 0}\r\n h = value;\r\n break;\r\n case \"saturation\":\r\n if (value < 0) { value = 0}\r\n if (value > 100) { value = 100}\r\n s = value / 100;\r\n break;\r\n case \"lightness\":\r\n if (value < 0) { value = 0}\r\n if (value > 100) { value = 100}\r\n l = value / 100;\r\n break; \r\n default:\r\n break; \r\n }\r\n newColor.hue = h;\r\n newColor.saturation = s;\r\n newColor.lightness = l;\r\n this.currentColor = newColor;\r\n }\r\n }\r\n\r\n private handleHexChange(value: string){\r\n const newColor = new ColorInfo();\r\n if (value.match(/^(?:[\\da-f]{3}|[\\da-f]{6})$/i).length > 0) {\r\n if (value.length === 3){\r\n let expanded = value[0] + value[0] + value[1] + value[1] + value[2] + value [2];\r\n value = expanded;\r\n }\r\n newColor.red = parseInt(value.substr(0,2), 16);\r\n newColor.green = parseInt(value.substr(2,2), 16);\r\n newColor.blue = parseInt(value.substr(4,2), 16);\r\n }\r\n else{\r\n newColor.red = this.currentColor.red;\r\n newColor.green = this.currentColor.green;\r\n newColor.blue = this.currentColor.blue;\r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n private switchColorMode(e) {\r\n switch(e.target.id) {\r\n case \"rgb-switch\":\r\n this.rgbDisplay = \"none\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"flex\";\r\n break;\r\n case \"hex-switch\":\r\n this.rgbDisplay = \"none\";\r\n this.hslDisplay = \"flex\";\r\n this.hexDisplay = \"none\";\r\n break;\r\n case \"hsl-switch\":\r\n this.rgbDisplay = \"flex\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"none\";\r\n break;\r\n default:\r\n this.rgbDisplay = \"flex\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"none\";\r\n }\r\n }\r\n\r\n private handleSaturationLightnessKeyDown = (e) => { \r\n let newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n\r\n let value = 0.01;\r\n if (e.shiftKey) { value = 0.1 ;}\r\n\r\n switch (e.key) {\r\n case \"ArrowUp\":\r\n newColor.lightness += value;\r\n break;\r\n case \"ArrowDown\":\r\n newColor.lightness -= value;\r\n break;\r\n case \"ArrowLeft\":\r\n newColor.saturation -= value;\r\n break;\r\n case \"ArrowRight\":\r\n newColor.saturation += value;\r\n default:\r\n break; \r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleHueKeyDown = (e) => {\r\n let newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n\r\n let value = 1;\r\n if (e.shiftKey) { value = 10}\r\n\r\n switch (e.key) {\r\n case \"ArrowLeft\":\r\n newColor.hue -= value;\r\n break;\r\n case \"ArrowRight\":\r\n newColor.hue += value;\r\n default:\r\n break;\r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n render() {\r\n const hue = this.currentColor.hue;\r\n const saturation = this.currentColor.saturation;\r\n const lightness = this.currentColor.lightness;\r\n const red = this.currentColor.red;\r\n const green = this.currentColor.green;\r\n const blue = this.currentColor.blue;\r\n\r\n return (\r\n <div class=\"dnn-color-picker\">\r\n <div class=\"dnn-color-sliders\">\r\n <div class=\"dnn-color-s-b\" ref={(element) => this.saturationLightnessBox = element as HTMLDivElement}\r\n style={{backgroundColor: `hsl(${hue},100%,50%)`}}\r\n onMouseDown={this.handleSaturationLightnessMouseDown.bind(this)}\r\n >\r\n <button class=\"dnn-s-b-picker\"\r\n aria-label=\"Press up or down to adjust lightness, left or right to adjust saturation, hold shift to move by 10%\"\r\n role=\"slider\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n aria-valuetext={`Saturation: ${Math.round(this.currentColor.saturation*100)}%, Lightness: ${Math.round(this.currentColor.lightness*100)}%`}\r\n style={{\r\n left: Math.round(saturation * 100) + \"%\",\r\n bottom: Math.round(lightness * 100) + \"%\"\r\n }}\r\n onKeyDown={(e) => this.handleSaturationLightnessKeyDown(e)}\r\n />\r\n </div>\r\n <div class=\"dnn-color-bar\">\r\n <div class=\"dnn-color-result\" style={{\r\n backgroundColor: '#' + this.getHex(),\r\n boxShadow: \"0 0 2px 1px \" + \"#\" + this.getContrast()\r\n }} \r\n />\r\n <div class=\"dnn-color-hue\"\r\n ref={(element) => this.hueRange = element as HTMLDivElement}\r\n onMouseDown={this.handleHueMouseDown.bind(this)}\r\n >\r\n <button class=\"dnn-hue-picker\"\r\n aria-label=\"Press left or right to adjust hue, hold shift to move by 10 degrees\"\r\n role=\"slider\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"359\"\r\n aria-valuenow={Math.round(hue)}\r\n style={{left: (hue/359*100).toString() + \"%\"}}\r\n onKeyDown={(e) => this.handleHueKeyDown(e)}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"dnn-color-fields\">\r\n <div class=\"dnn-rgb-color-fields\" style={{display: this.rgbDisplay}}>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>R</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" step=\"1\" class=\"red\" value={red} aria-label=\"red value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'red')}\r\n />\r\n </div>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>G</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" class=\"green\" value={green} aria-label=\"green value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'green')}\r\n />\r\n </div>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>B</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" class=\"blue\" value={blue} aria-label=\"blue value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'blue')}\r\n />\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"rgb-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"switch to hexadecimal value entry\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-hsl-color-fields\" style={{display: this.hslDisplay}}>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>H</label>\r\n <input type=\"number\" min=\"0\" max=\"359\" step={1} value={Math.round(hue)} aria-label=\"Hue\"\r\n onChange={(e) => this.handleHSLChange(e, 'hue')}\r\n />\r\n </div>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>S</label>\r\n <input type=\"number\" min=\"0\" max=\"100\" step={1} value={Math.round(saturation*100)} aria-label=\"Saturation\"\r\n onChange={(e) => this.handleHSLChange(e, 'saturation')}\r\n />\r\n </div>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>L</label>\r\n <input type=\"number\" min=\"0\" max=\"100\" step={1} value={Math.round(lightness*100)} aria-label=\"Lightness\"\r\n onChange={(e) => this.handleHSLChange(e, 'lightness')}\r\n />\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"hsl-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"Switch to red, green, blue entry mode\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-hex-color-fields\" style={{display: this.hexDisplay}}>\r\n <div class=\"dnn-hex-color-field\">\r\n <label>HEX</label>\r\n <div class=\"hex-input\">\r\n <input type=\"text\" aria-label=\"Hexadecimal value\"\r\n value={this.getHex()}\r\n onChange={e => this.handleHexChange((e.target as HTMLInputElement).value)}\r\n />\r\n <button\r\n class=\"copy\"\r\n aria-label=\"copy value\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"hex-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"Switch to hue saturation lightness values\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}"],"version":3}