headroom-cms 0.1.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 (237) hide show
  1. package/README.md +282 -0
  2. package/admin/assets/AdminsPage-CnrQqwKA.js +1 -0
  3. package/admin/assets/AllContentPage-ByN1h3PP.js +1 -0
  4. package/admin/assets/ApiKeysPage-FgNHZPBS.js +1 -0
  5. package/admin/assets/AuditPage-DAPpo-sj.js +1 -0
  6. package/admin/assets/BlockEditor-CZTwex-o.js +179 -0
  7. package/admin/assets/BlockEditor-Cp_wZ2xN.css +1 -0
  8. package/admin/assets/BlockTypeEditPage-Buuwbx1P.js +1 -0
  9. package/admin/assets/BlockTypesPage-Dj0qmsqX.js +1 -0
  10. package/admin/assets/BulkActionBar-BMcUBJSH.js +1 -0
  11. package/admin/assets/CollectionEditPage-CLgQu2HS.js +1 -0
  12. package/admin/assets/CollectionsPage-BnCaxALz.js +1 -0
  13. package/admin/assets/ContentCreatePage-CJI326o-.js +1 -0
  14. package/admin/assets/ContentEditPage-A4i8P2Jd.js +3 -0
  15. package/admin/assets/ContentListPage-Bc4mBIkB.js +1 -0
  16. package/admin/assets/CustomBlockPreview-CCssn6vF.js +479 -0
  17. package/admin/assets/FieldBuilder-YJGSk0nY.js +3 -0
  18. package/admin/assets/LoginPage-Jrne8-Wr.js +1 -0
  19. package/admin/assets/MediaPage-DfPQBmNf.css +1 -0
  20. package/admin/assets/MediaPage-_qNXqsZg.js +1 -0
  21. package/admin/assets/SiteSettingsPage-CoZnavij.js +1 -0
  22. package/admin/assets/SitesPage-ETqFT3nO.js +1 -0
  23. package/admin/assets/TagsPage-BGpp0XZM.js +1 -0
  24. package/admin/assets/UsersPage-CKRJpAb6.js +1 -0
  25. package/admin/assets/WebhookEditPage-BOcLe5OJ.js +1 -0
  26. package/admin/assets/WebhooksPage-Czco583Y.js +1 -0
  27. package/admin/assets/badge-0Z1nL6DI.js +1 -0
  28. package/admin/assets/card-D1-S-QZ6.js +1 -0
  29. package/admin/assets/check-BGA0ADyt.js +1 -0
  30. package/admin/assets/checkbox-BPqrj_XS.js +1 -0
  31. package/admin/assets/command-ChD319uJ.js +1 -0
  32. package/admin/assets/contentStatus-DfWHjFVB.js +1 -0
  33. package/admin/assets/copy-BqH9rXYM.js +1 -0
  34. package/admin/assets/core.esm-Csvubn5Q.js +5 -0
  35. package/admin/assets/format-CZ9bpk32.js +1 -0
  36. package/admin/assets/index-DOqKbrpW.css +1 -0
  37. package/admin/assets/index-Ds50UTAc.js +18 -0
  38. package/admin/assets/lib-BrI1UB_t.js +38 -0
  39. package/admin/assets/media-url-DIg_vSyf.js +1 -0
  40. package/admin/assets/module-RjUF93sV.js +716 -0
  41. package/admin/assets/native-48B9X9Wg.js +1 -0
  42. package/admin/assets/plus-BgHSYWJN.js +1 -0
  43. package/admin/assets/radix-DQ3amgxj.js +51 -0
  44. package/admin/assets/react-vendor-DNVhVxD7.js +4 -0
  45. package/admin/assets/search-DIzcfCVh.js +1 -0
  46. package/admin/assets/select-CJXZv4wv.js +1 -0
  47. package/admin/assets/sortable.esm-Zh-9QRSf.js +1 -0
  48. package/admin/assets/table-B3EHrN_H.js +1 -0
  49. package/admin/assets/tanstack-BO6c-AOu.js +1 -0
  50. package/admin/assets/trash-2-Gny2Upn-.js +1 -0
  51. package/admin/assets/useAdminResolver-BsQc_N4z.js +1 -0
  52. package/admin/assets/useContent-CSobIico.js +1 -0
  53. package/admin/assets/useDebouncedValue-Bf8UizjU.js +1 -0
  54. package/admin/assets/useMedia-CQnmMz4N.js +1 -0
  55. package/admin/assets/useTags-CYqbj5cK.js +1 -0
  56. package/admin/assets/useWebhooks-DXgtQ3aU.js +1 -0
  57. package/admin/index.html +21 -0
  58. package/admin/vite.svg +1 -0
  59. package/dist/admin-site.d.ts +30 -0
  60. package/dist/admin-site.d.ts.map +1 -0
  61. package/dist/admin-site.js +80 -0
  62. package/dist/admin-site.js.map +1 -0
  63. package/dist/api.d.ts +26 -0
  64. package/dist/api.d.ts.map +1 -0
  65. package/dist/api.js +91 -0
  66. package/dist/api.js.map +1 -0
  67. package/dist/auth.d.ts +27 -0
  68. package/dist/auth.d.ts.map +1 -0
  69. package/dist/auth.js +86 -0
  70. package/dist/auth.js.map +1 -0
  71. package/dist/cdn.d.ts +27 -0
  72. package/dist/cdn.d.ts.map +1 -0
  73. package/dist/cdn.js +382 -0
  74. package/dist/cdn.js.map +1 -0
  75. package/dist/image.d.ts +21 -0
  76. package/dist/image.d.ts.map +1 -0
  77. package/dist/image.js +48 -0
  78. package/dist/image.js.map +1 -0
  79. package/dist/index.d.ts +85 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +124 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/storage.d.ts +21 -0
  84. package/dist/storage.d.ts.map +1 -0
  85. package/dist/storage.js +125 -0
  86. package/dist/storage.js.map +1 -0
  87. package/dist/webhooks.d.ts +23 -0
  88. package/dist/webhooks.d.ts.map +1 -0
  89. package/dist/webhooks.js +91 -0
  90. package/dist/webhooks.js.map +1 -0
  91. package/lambda/api/bootstrap +0 -0
  92. package/lambda/api/resource.enc +0 -0
  93. package/lambda/functions/custom-message/index.mjs +112 -0
  94. package/lambda/functions/custom-message/resource.enc +1 -0
  95. package/lambda/image-lambda/index.mjs +188 -0
  96. package/lambda/image-lambda/node_modules/.package-lock.json +160 -0
  97. package/lambda/image-lambda/node_modules/@img/sharp-libvips-linux-arm64/README.md +46 -0
  98. package/lambda/image-lambda/node_modules/@img/sharp-libvips-linux-arm64/lib/glib-2.0/include/glibconfig.h +220 -0
  99. package/lambda/image-lambda/node_modules/@img/sharp-libvips-linux-arm64/lib/index.js +1 -0
  100. package/lambda/image-lambda/node_modules/@img/sharp-libvips-linux-arm64/lib/libvips-cpp.so.42 +0 -0
  101. package/lambda/image-lambda/node_modules/@img/sharp-libvips-linux-arm64/package.json +42 -0
  102. package/lambda/image-lambda/node_modules/@img/sharp-libvips-linux-arm64/versions.json +30 -0
  103. package/lambda/image-lambda/node_modules/@img/sharp-linux-arm64/LICENSE +191 -0
  104. package/lambda/image-lambda/node_modules/@img/sharp-linux-arm64/README.md +18 -0
  105. package/lambda/image-lambda/node_modules/@img/sharp-linux-arm64/lib/sharp-linux-arm64.node +0 -0
  106. package/lambda/image-lambda/node_modules/@img/sharp-linux-arm64/package.json +46 -0
  107. package/lambda/image-lambda/node_modules/color/LICENSE +21 -0
  108. package/lambda/image-lambda/node_modules/color/README.md +123 -0
  109. package/lambda/image-lambda/node_modules/color/index.js +496 -0
  110. package/lambda/image-lambda/node_modules/color/package.json +47 -0
  111. package/lambda/image-lambda/node_modules/color-convert/CHANGELOG.md +54 -0
  112. package/lambda/image-lambda/node_modules/color-convert/LICENSE +21 -0
  113. package/lambda/image-lambda/node_modules/color-convert/README.md +68 -0
  114. package/lambda/image-lambda/node_modules/color-convert/conversions.js +839 -0
  115. package/lambda/image-lambda/node_modules/color-convert/index.js +81 -0
  116. package/lambda/image-lambda/node_modules/color-convert/package.json +48 -0
  117. package/lambda/image-lambda/node_modules/color-convert/route.js +97 -0
  118. package/lambda/image-lambda/node_modules/color-name/LICENSE +8 -0
  119. package/lambda/image-lambda/node_modules/color-name/README.md +11 -0
  120. package/lambda/image-lambda/node_modules/color-name/index.js +152 -0
  121. package/lambda/image-lambda/node_modules/color-name/package.json +28 -0
  122. package/lambda/image-lambda/node_modules/color-string/LICENSE +21 -0
  123. package/lambda/image-lambda/node_modules/color-string/README.md +62 -0
  124. package/lambda/image-lambda/node_modules/color-string/index.js +242 -0
  125. package/lambda/image-lambda/node_modules/color-string/package.json +39 -0
  126. package/lambda/image-lambda/node_modules/detect-libc/LICENSE +201 -0
  127. package/lambda/image-lambda/node_modules/detect-libc/README.md +163 -0
  128. package/lambda/image-lambda/node_modules/detect-libc/index.d.ts +14 -0
  129. package/lambda/image-lambda/node_modules/detect-libc/lib/detect-libc.js +313 -0
  130. package/lambda/image-lambda/node_modules/detect-libc/lib/elf.js +39 -0
  131. package/lambda/image-lambda/node_modules/detect-libc/lib/filesystem.js +51 -0
  132. package/lambda/image-lambda/node_modules/detect-libc/lib/process.js +24 -0
  133. package/lambda/image-lambda/node_modules/detect-libc/package.json +44 -0
  134. package/lambda/image-lambda/node_modules/is-arrayish/LICENSE +21 -0
  135. package/lambda/image-lambda/node_modules/is-arrayish/README.md +16 -0
  136. package/lambda/image-lambda/node_modules/is-arrayish/index.js +9 -0
  137. package/lambda/image-lambda/node_modules/is-arrayish/package.json +45 -0
  138. package/lambda/image-lambda/node_modules/semver/LICENSE +15 -0
  139. package/lambda/image-lambda/node_modules/semver/README.md +665 -0
  140. package/lambda/image-lambda/node_modules/semver/bin/semver.js +191 -0
  141. package/lambda/image-lambda/node_modules/semver/classes/comparator.js +143 -0
  142. package/lambda/image-lambda/node_modules/semver/classes/index.js +7 -0
  143. package/lambda/image-lambda/node_modules/semver/classes/range.js +557 -0
  144. package/lambda/image-lambda/node_modules/semver/classes/semver.js +333 -0
  145. package/lambda/image-lambda/node_modules/semver/functions/clean.js +8 -0
  146. package/lambda/image-lambda/node_modules/semver/functions/cmp.js +54 -0
  147. package/lambda/image-lambda/node_modules/semver/functions/coerce.js +62 -0
  148. package/lambda/image-lambda/node_modules/semver/functions/compare-build.js +9 -0
  149. package/lambda/image-lambda/node_modules/semver/functions/compare-loose.js +5 -0
  150. package/lambda/image-lambda/node_modules/semver/functions/compare.js +7 -0
  151. package/lambda/image-lambda/node_modules/semver/functions/diff.js +60 -0
  152. package/lambda/image-lambda/node_modules/semver/functions/eq.js +5 -0
  153. package/lambda/image-lambda/node_modules/semver/functions/gt.js +5 -0
  154. package/lambda/image-lambda/node_modules/semver/functions/gte.js +5 -0
  155. package/lambda/image-lambda/node_modules/semver/functions/inc.js +21 -0
  156. package/lambda/image-lambda/node_modules/semver/functions/lt.js +5 -0
  157. package/lambda/image-lambda/node_modules/semver/functions/lte.js +5 -0
  158. package/lambda/image-lambda/node_modules/semver/functions/major.js +5 -0
  159. package/lambda/image-lambda/node_modules/semver/functions/minor.js +5 -0
  160. package/lambda/image-lambda/node_modules/semver/functions/neq.js +5 -0
  161. package/lambda/image-lambda/node_modules/semver/functions/parse.js +18 -0
  162. package/lambda/image-lambda/node_modules/semver/functions/patch.js +5 -0
  163. package/lambda/image-lambda/node_modules/semver/functions/prerelease.js +8 -0
  164. package/lambda/image-lambda/node_modules/semver/functions/rcompare.js +5 -0
  165. package/lambda/image-lambda/node_modules/semver/functions/rsort.js +5 -0
  166. package/lambda/image-lambda/node_modules/semver/functions/satisfies.js +12 -0
  167. package/lambda/image-lambda/node_modules/semver/functions/sort.js +5 -0
  168. package/lambda/image-lambda/node_modules/semver/functions/valid.js +8 -0
  169. package/lambda/image-lambda/node_modules/semver/index.js +91 -0
  170. package/lambda/image-lambda/node_modules/semver/internal/constants.js +37 -0
  171. package/lambda/image-lambda/node_modules/semver/internal/debug.js +11 -0
  172. package/lambda/image-lambda/node_modules/semver/internal/identifiers.js +29 -0
  173. package/lambda/image-lambda/node_modules/semver/internal/lrucache.js +42 -0
  174. package/lambda/image-lambda/node_modules/semver/internal/parse-options.js +17 -0
  175. package/lambda/image-lambda/node_modules/semver/internal/re.js +223 -0
  176. package/lambda/image-lambda/node_modules/semver/package.json +78 -0
  177. package/lambda/image-lambda/node_modules/semver/preload.js +4 -0
  178. package/lambda/image-lambda/node_modules/semver/range.bnf +16 -0
  179. package/lambda/image-lambda/node_modules/semver/ranges/gtr.js +6 -0
  180. package/lambda/image-lambda/node_modules/semver/ranges/intersects.js +9 -0
  181. package/lambda/image-lambda/node_modules/semver/ranges/ltr.js +6 -0
  182. package/lambda/image-lambda/node_modules/semver/ranges/max-satisfying.js +27 -0
  183. package/lambda/image-lambda/node_modules/semver/ranges/min-satisfying.js +26 -0
  184. package/lambda/image-lambda/node_modules/semver/ranges/min-version.js +63 -0
  185. package/lambda/image-lambda/node_modules/semver/ranges/outside.js +82 -0
  186. package/lambda/image-lambda/node_modules/semver/ranges/simplify.js +49 -0
  187. package/lambda/image-lambda/node_modules/semver/ranges/subset.js +249 -0
  188. package/lambda/image-lambda/node_modules/semver/ranges/to-comparators.js +10 -0
  189. package/lambda/image-lambda/node_modules/semver/ranges/valid.js +13 -0
  190. package/lambda/image-lambda/node_modules/sharp/LICENSE +191 -0
  191. package/lambda/image-lambda/node_modules/sharp/README.md +118 -0
  192. package/lambda/image-lambda/node_modules/sharp/install/check.js +41 -0
  193. package/lambda/image-lambda/node_modules/sharp/lib/channel.js +174 -0
  194. package/lambda/image-lambda/node_modules/sharp/lib/colour.js +180 -0
  195. package/lambda/image-lambda/node_modules/sharp/lib/composite.js +210 -0
  196. package/lambda/image-lambda/node_modules/sharp/lib/constructor.js +452 -0
  197. package/lambda/image-lambda/node_modules/sharp/lib/index.d.ts +1754 -0
  198. package/lambda/image-lambda/node_modules/sharp/lib/index.js +16 -0
  199. package/lambda/image-lambda/node_modules/sharp/lib/input.js +658 -0
  200. package/lambda/image-lambda/node_modules/sharp/lib/is.js +169 -0
  201. package/lambda/image-lambda/node_modules/sharp/lib/libvips.js +203 -0
  202. package/lambda/image-lambda/node_modules/sharp/lib/operation.js +958 -0
  203. package/lambda/image-lambda/node_modules/sharp/lib/output.js +1587 -0
  204. package/lambda/image-lambda/node_modules/sharp/lib/resize.js +587 -0
  205. package/lambda/image-lambda/node_modules/sharp/lib/sharp.js +114 -0
  206. package/lambda/image-lambda/node_modules/sharp/lib/utility.js +296 -0
  207. package/lambda/image-lambda/node_modules/sharp/package.json +222 -0
  208. package/lambda/image-lambda/node_modules/sharp/src/binding.gyp +280 -0
  209. package/lambda/image-lambda/node_modules/sharp/src/common.cc +1091 -0
  210. package/lambda/image-lambda/node_modules/sharp/src/common.h +393 -0
  211. package/lambda/image-lambda/node_modules/sharp/src/metadata.cc +320 -0
  212. package/lambda/image-lambda/node_modules/sharp/src/metadata.h +85 -0
  213. package/lambda/image-lambda/node_modules/sharp/src/operations.cc +475 -0
  214. package/lambda/image-lambda/node_modules/sharp/src/operations.h +125 -0
  215. package/lambda/image-lambda/node_modules/sharp/src/pipeline.cc +1758 -0
  216. package/lambda/image-lambda/node_modules/sharp/src/pipeline.h +393 -0
  217. package/lambda/image-lambda/node_modules/sharp/src/sharp.cc +40 -0
  218. package/lambda/image-lambda/node_modules/sharp/src/stats.cc +183 -0
  219. package/lambda/image-lambda/node_modules/sharp/src/stats.h +59 -0
  220. package/lambda/image-lambda/node_modules/sharp/src/utilities.cc +269 -0
  221. package/lambda/image-lambda/node_modules/sharp/src/utilities.h +19 -0
  222. package/lambda/image-lambda/node_modules/simple-swizzle/LICENSE +21 -0
  223. package/lambda/image-lambda/node_modules/simple-swizzle/README.md +43 -0
  224. package/lambda/image-lambda/node_modules/simple-swizzle/index.js +29 -0
  225. package/lambda/image-lambda/node_modules/simple-swizzle/package.json +36 -0
  226. package/lambda/webhook-worker/bootstrap +0 -0
  227. package/lambda/webhook-worker/resource.enc +0 -0
  228. package/package.json +50 -0
  229. package/src/admin-site.ts +108 -0
  230. package/src/api.ts +113 -0
  231. package/src/auth.ts +110 -0
  232. package/src/cdn.ts +449 -0
  233. package/src/image.ts +62 -0
  234. package/src/index.ts +216 -0
  235. package/src/sst-env.d.ts +143 -0
  236. package/src/storage.ts +138 -0
  237. package/src/webhooks.ts +114 -0
@@ -0,0 +1,123 @@
1
+ # color
2
+
3
+ > JavaScript library for immutable color conversion and manipulation with support for CSS color strings.
4
+
5
+ ```js
6
+ const color = Color('#7743CE').alpha(0.5).lighten(0.5);
7
+ console.log(color.hsl().string()); // 'hsla(262, 59%, 81%, 0.5)'
8
+
9
+ console.log(color.cmyk().round().array()); // [ 16, 25, 0, 8, 0.5 ]
10
+
11
+ console.log(color.ansi256().object()); // { ansi256: 183, alpha: 0.5 }
12
+ ```
13
+
14
+ ## Install
15
+ ```console
16
+ $ npm install color
17
+ ```
18
+
19
+ ## Usage
20
+ ```js
21
+ const Color = require('color');
22
+ ```
23
+
24
+ ### Constructors
25
+ ```js
26
+ const color = Color('rgb(255, 255, 255)')
27
+ const color = Color({r: 255, g: 255, b: 255})
28
+ const color = Color.rgb(255, 255, 255)
29
+ const color = Color.rgb([255, 255, 255])
30
+ ```
31
+
32
+ Set the values for individual channels with `alpha`, `red`, `green`, `blue`, `hue`, `saturationl` (hsl), `saturationv` (hsv), `lightness`, `whiteness`, `blackness`, `cyan`, `magenta`, `yellow`, `black`
33
+
34
+ String constructors are handled by [color-string](https://www.npmjs.com/package/color-string)
35
+
36
+ ### Getters
37
+ ```js
38
+ color.hsl();
39
+ ```
40
+ Convert a color to a different space (`hsl()`, `cmyk()`, etc.).
41
+
42
+ ```js
43
+ color.object(); // {r: 255, g: 255, b: 255}
44
+ ```
45
+ Get a hash of the color value. Reflects the color's current model (see above).
46
+
47
+ ```js
48
+ color.rgb().array() // [255, 255, 255]
49
+ ```
50
+ Get an array of the values with `array()`. Reflects the color's current model (see above).
51
+
52
+ ```js
53
+ color.rgbNumber() // 16777215 (0xffffff)
54
+ ```
55
+ Get the rgb number value.
56
+
57
+ ```js
58
+ color.hex() // #ffffff
59
+ ```
60
+ Get the hex value. (**NOTE:** `.hex()` does not return alpha values; use `.hexa()` for an RGBA representation)
61
+
62
+ ```js
63
+ color.red() // 255
64
+ ```
65
+ Get the value for an individual channel.
66
+
67
+ ### CSS Strings
68
+ ```js
69
+ color.hsl().string() // 'hsl(320, 50%, 100%)'
70
+ ```
71
+
72
+ Calling `.string()` with a number rounds the numbers to that decimal place. It defaults to 1.
73
+
74
+ ### Luminosity
75
+ ```js
76
+ color.luminosity(); // 0.412
77
+ ```
78
+ The [WCAG luminosity](http://www.w3.org/TR/WCAG20/#relativeluminancedef) of the color. 0 is black, 1 is white.
79
+
80
+ ```js
81
+ color.contrast(Color("blue")) // 12
82
+ ```
83
+ The [WCAG contrast ratio](http://www.w3.org/TR/WCAG20/#contrast-ratiodef) to another color, from 1 (same color) to 21 (contrast b/w white and black).
84
+
85
+ ```js
86
+ color.isLight(); // true
87
+ color.isDark(); // false
88
+ ```
89
+ Get whether the color is "light" or "dark", useful for deciding text color.
90
+
91
+ ### Manipulation
92
+ ```js
93
+ color.negate() // rgb(0, 100, 255) -> rgb(255, 155, 0)
94
+
95
+ color.lighten(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 75%)
96
+ color.lighten(0.5) // hsl(100, 50%, 0) -> hsl(100, 50%, 0)
97
+ color.darken(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 25%)
98
+ color.darken(0.5) // hsl(100, 50%, 0) -> hsl(100, 50%, 0)
99
+
100
+ color.lightness(50) // hsl(100, 50%, 10%) -> hsl(100, 50%, 50%)
101
+
102
+ color.saturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 75%, 50%)
103
+ color.desaturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 25%, 50%)
104
+ color.grayscale() // #5CBF54 -> #969696
105
+
106
+ color.whiten(0.5) // hwb(100, 50%, 50%) -> hwb(100, 75%, 50%)
107
+ color.blacken(0.5) // hwb(100, 50%, 50%) -> hwb(100, 50%, 75%)
108
+
109
+ color.fade(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 0.4)
110
+ color.opaquer(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 1.0)
111
+
112
+ color.rotate(180) // hsl(60, 20%, 20%) -> hsl(240, 20%, 20%)
113
+ color.rotate(-90) // hsl(60, 20%, 20%) -> hsl(330, 20%, 20%)
114
+
115
+ color.mix(Color("yellow")) // cyan -> rgb(128, 255, 128)
116
+ color.mix(Color("yellow"), 0.3) // cyan -> rgb(77, 255, 179)
117
+
118
+ // chaining
119
+ color.green(100).grayscale().lighten(0.6)
120
+ ```
121
+
122
+ ## Propers
123
+ The API was inspired by [color-js](https://github.com/brehaut/color-js). Manipulation functions by CSS tools like Sass, LESS, and Stylus.
@@ -0,0 +1,496 @@
1
+ const colorString = require('color-string');
2
+ const convert = require('color-convert');
3
+
4
+ const skippedModels = [
5
+ // To be honest, I don't really feel like keyword belongs in color convert, but eh.
6
+ 'keyword',
7
+
8
+ // Gray conflicts with some method names, and has its own method defined.
9
+ 'gray',
10
+
11
+ // Shouldn't really be in color-convert either...
12
+ 'hex',
13
+ ];
14
+
15
+ const hashedModelKeys = {};
16
+ for (const model of Object.keys(convert)) {
17
+ hashedModelKeys[[...convert[model].labels].sort().join('')] = model;
18
+ }
19
+
20
+ const limiters = {};
21
+
22
+ function Color(object, model) {
23
+ if (!(this instanceof Color)) {
24
+ return new Color(object, model);
25
+ }
26
+
27
+ if (model && model in skippedModels) {
28
+ model = null;
29
+ }
30
+
31
+ if (model && !(model in convert)) {
32
+ throw new Error('Unknown model: ' + model);
33
+ }
34
+
35
+ let i;
36
+ let channels;
37
+
38
+ if (object == null) { // eslint-disable-line no-eq-null,eqeqeq
39
+ this.model = 'rgb';
40
+ this.color = [0, 0, 0];
41
+ this.valpha = 1;
42
+ } else if (object instanceof Color) {
43
+ this.model = object.model;
44
+ this.color = [...object.color];
45
+ this.valpha = object.valpha;
46
+ } else if (typeof object === 'string') {
47
+ const result = colorString.get(object);
48
+ if (result === null) {
49
+ throw new Error('Unable to parse color from string: ' + object);
50
+ }
51
+
52
+ this.model = result.model;
53
+ channels = convert[this.model].channels;
54
+ this.color = result.value.slice(0, channels);
55
+ this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;
56
+ } else if (object.length > 0) {
57
+ this.model = model || 'rgb';
58
+ channels = convert[this.model].channels;
59
+ const newArray = Array.prototype.slice.call(object, 0, channels);
60
+ this.color = zeroArray(newArray, channels);
61
+ this.valpha = typeof object[channels] === 'number' ? object[channels] : 1;
62
+ } else if (typeof object === 'number') {
63
+ // This is always RGB - can be converted later on.
64
+ this.model = 'rgb';
65
+ this.color = [
66
+ (object >> 16) & 0xFF,
67
+ (object >> 8) & 0xFF,
68
+ object & 0xFF,
69
+ ];
70
+ this.valpha = 1;
71
+ } else {
72
+ this.valpha = 1;
73
+
74
+ const keys = Object.keys(object);
75
+ if ('alpha' in object) {
76
+ keys.splice(keys.indexOf('alpha'), 1);
77
+ this.valpha = typeof object.alpha === 'number' ? object.alpha : 0;
78
+ }
79
+
80
+ const hashedKeys = keys.sort().join('');
81
+ if (!(hashedKeys in hashedModelKeys)) {
82
+ throw new Error('Unable to parse color from object: ' + JSON.stringify(object));
83
+ }
84
+
85
+ this.model = hashedModelKeys[hashedKeys];
86
+
87
+ const {labels} = convert[this.model];
88
+ const color = [];
89
+ for (i = 0; i < labels.length; i++) {
90
+ color.push(object[labels[i]]);
91
+ }
92
+
93
+ this.color = zeroArray(color);
94
+ }
95
+
96
+ // Perform limitations (clamping, etc.)
97
+ if (limiters[this.model]) {
98
+ channels = convert[this.model].channels;
99
+ for (i = 0; i < channels; i++) {
100
+ const limit = limiters[this.model][i];
101
+ if (limit) {
102
+ this.color[i] = limit(this.color[i]);
103
+ }
104
+ }
105
+ }
106
+
107
+ this.valpha = Math.max(0, Math.min(1, this.valpha));
108
+
109
+ if (Object.freeze) {
110
+ Object.freeze(this);
111
+ }
112
+ }
113
+
114
+ Color.prototype = {
115
+ toString() {
116
+ return this.string();
117
+ },
118
+
119
+ toJSON() {
120
+ return this[this.model]();
121
+ },
122
+
123
+ string(places) {
124
+ let self = this.model in colorString.to ? this : this.rgb();
125
+ self = self.round(typeof places === 'number' ? places : 1);
126
+ const args = self.valpha === 1 ? self.color : [...self.color, this.valpha];
127
+ return colorString.to[self.model](args);
128
+ },
129
+
130
+ percentString(places) {
131
+ const self = this.rgb().round(typeof places === 'number' ? places : 1);
132
+ const args = self.valpha === 1 ? self.color : [...self.color, this.valpha];
133
+ return colorString.to.rgb.percent(args);
134
+ },
135
+
136
+ array() {
137
+ return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];
138
+ },
139
+
140
+ object() {
141
+ const result = {};
142
+ const {channels} = convert[this.model];
143
+ const {labels} = convert[this.model];
144
+
145
+ for (let i = 0; i < channels; i++) {
146
+ result[labels[i]] = this.color[i];
147
+ }
148
+
149
+ if (this.valpha !== 1) {
150
+ result.alpha = this.valpha;
151
+ }
152
+
153
+ return result;
154
+ },
155
+
156
+ unitArray() {
157
+ const rgb = this.rgb().color;
158
+ rgb[0] /= 255;
159
+ rgb[1] /= 255;
160
+ rgb[2] /= 255;
161
+
162
+ if (this.valpha !== 1) {
163
+ rgb.push(this.valpha);
164
+ }
165
+
166
+ return rgb;
167
+ },
168
+
169
+ unitObject() {
170
+ const rgb = this.rgb().object();
171
+ rgb.r /= 255;
172
+ rgb.g /= 255;
173
+ rgb.b /= 255;
174
+
175
+ if (this.valpha !== 1) {
176
+ rgb.alpha = this.valpha;
177
+ }
178
+
179
+ return rgb;
180
+ },
181
+
182
+ round(places) {
183
+ places = Math.max(places || 0, 0);
184
+ return new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);
185
+ },
186
+
187
+ alpha(value) {
188
+ if (value !== undefined) {
189
+ return new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);
190
+ }
191
+
192
+ return this.valpha;
193
+ },
194
+
195
+ // Rgb
196
+ red: getset('rgb', 0, maxfn(255)),
197
+ green: getset('rgb', 1, maxfn(255)),
198
+ blue: getset('rgb', 2, maxfn(255)),
199
+
200
+ hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),
201
+
202
+ saturationl: getset('hsl', 1, maxfn(100)),
203
+ lightness: getset('hsl', 2, maxfn(100)),
204
+
205
+ saturationv: getset('hsv', 1, maxfn(100)),
206
+ value: getset('hsv', 2, maxfn(100)),
207
+
208
+ chroma: getset('hcg', 1, maxfn(100)),
209
+ gray: getset('hcg', 2, maxfn(100)),
210
+
211
+ white: getset('hwb', 1, maxfn(100)),
212
+ wblack: getset('hwb', 2, maxfn(100)),
213
+
214
+ cyan: getset('cmyk', 0, maxfn(100)),
215
+ magenta: getset('cmyk', 1, maxfn(100)),
216
+ yellow: getset('cmyk', 2, maxfn(100)),
217
+ black: getset('cmyk', 3, maxfn(100)),
218
+
219
+ x: getset('xyz', 0, maxfn(95.047)),
220
+ y: getset('xyz', 1, maxfn(100)),
221
+ z: getset('xyz', 2, maxfn(108.833)),
222
+
223
+ l: getset('lab', 0, maxfn(100)),
224
+ a: getset('lab', 1),
225
+ b: getset('lab', 2),
226
+
227
+ keyword(value) {
228
+ if (value !== undefined) {
229
+ return new Color(value);
230
+ }
231
+
232
+ return convert[this.model].keyword(this.color);
233
+ },
234
+
235
+ hex(value) {
236
+ if (value !== undefined) {
237
+ return new Color(value);
238
+ }
239
+
240
+ return colorString.to.hex(this.rgb().round().color);
241
+ },
242
+
243
+ hexa(value) {
244
+ if (value !== undefined) {
245
+ return new Color(value);
246
+ }
247
+
248
+ const rgbArray = this.rgb().round().color;
249
+
250
+ let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();
251
+ if (alphaHex.length === 1) {
252
+ alphaHex = '0' + alphaHex;
253
+ }
254
+
255
+ return colorString.to.hex(rgbArray) + alphaHex;
256
+ },
257
+
258
+ rgbNumber() {
259
+ const rgb = this.rgb().color;
260
+ return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);
261
+ },
262
+
263
+ luminosity() {
264
+ // http://www.w3.org/TR/WCAG20/#relativeluminancedef
265
+ const rgb = this.rgb().color;
266
+
267
+ const lum = [];
268
+ for (const [i, element] of rgb.entries()) {
269
+ const chan = element / 255;
270
+ lum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;
271
+ }
272
+
273
+ return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
274
+ },
275
+
276
+ contrast(color2) {
277
+ // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
278
+ const lum1 = this.luminosity();
279
+ const lum2 = color2.luminosity();
280
+
281
+ if (lum1 > lum2) {
282
+ return (lum1 + 0.05) / (lum2 + 0.05);
283
+ }
284
+
285
+ return (lum2 + 0.05) / (lum1 + 0.05);
286
+ },
287
+
288
+ level(color2) {
289
+ // https://www.w3.org/TR/WCAG/#contrast-enhanced
290
+ const contrastRatio = this.contrast(color2);
291
+ if (contrastRatio >= 7) {
292
+ return 'AAA';
293
+ }
294
+
295
+ return (contrastRatio >= 4.5) ? 'AA' : '';
296
+ },
297
+
298
+ isDark() {
299
+ // YIQ equation from http://24ways.org/2010/calculating-color-contrast
300
+ const rgb = this.rgb().color;
301
+ const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;
302
+ return yiq < 128;
303
+ },
304
+
305
+ isLight() {
306
+ return !this.isDark();
307
+ },
308
+
309
+ negate() {
310
+ const rgb = this.rgb();
311
+ for (let i = 0; i < 3; i++) {
312
+ rgb.color[i] = 255 - rgb.color[i];
313
+ }
314
+
315
+ return rgb;
316
+ },
317
+
318
+ lighten(ratio) {
319
+ const hsl = this.hsl();
320
+ hsl.color[2] += hsl.color[2] * ratio;
321
+ return hsl;
322
+ },
323
+
324
+ darken(ratio) {
325
+ const hsl = this.hsl();
326
+ hsl.color[2] -= hsl.color[2] * ratio;
327
+ return hsl;
328
+ },
329
+
330
+ saturate(ratio) {
331
+ const hsl = this.hsl();
332
+ hsl.color[1] += hsl.color[1] * ratio;
333
+ return hsl;
334
+ },
335
+
336
+ desaturate(ratio) {
337
+ const hsl = this.hsl();
338
+ hsl.color[1] -= hsl.color[1] * ratio;
339
+ return hsl;
340
+ },
341
+
342
+ whiten(ratio) {
343
+ const hwb = this.hwb();
344
+ hwb.color[1] += hwb.color[1] * ratio;
345
+ return hwb;
346
+ },
347
+
348
+ blacken(ratio) {
349
+ const hwb = this.hwb();
350
+ hwb.color[2] += hwb.color[2] * ratio;
351
+ return hwb;
352
+ },
353
+
354
+ grayscale() {
355
+ // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
356
+ const rgb = this.rgb().color;
357
+ const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
358
+ return Color.rgb(value, value, value);
359
+ },
360
+
361
+ fade(ratio) {
362
+ return this.alpha(this.valpha - (this.valpha * ratio));
363
+ },
364
+
365
+ opaquer(ratio) {
366
+ return this.alpha(this.valpha + (this.valpha * ratio));
367
+ },
368
+
369
+ rotate(degrees) {
370
+ const hsl = this.hsl();
371
+ let hue = hsl.color[0];
372
+ hue = (hue + degrees) % 360;
373
+ hue = hue < 0 ? 360 + hue : hue;
374
+ hsl.color[0] = hue;
375
+ return hsl;
376
+ },
377
+
378
+ mix(mixinColor, weight) {
379
+ // Ported from sass implementation in C
380
+ // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
381
+ if (!mixinColor || !mixinColor.rgb) {
382
+ throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor);
383
+ }
384
+
385
+ const color1 = mixinColor.rgb();
386
+ const color2 = this.rgb();
387
+ const p = weight === undefined ? 0.5 : weight;
388
+
389
+ const w = 2 * p - 1;
390
+ const a = color1.alpha() - color2.alpha();
391
+
392
+ const w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;
393
+ const w2 = 1 - w1;
394
+
395
+ return Color.rgb(
396
+ w1 * color1.red() + w2 * color2.red(),
397
+ w1 * color1.green() + w2 * color2.green(),
398
+ w1 * color1.blue() + w2 * color2.blue(),
399
+ color1.alpha() * p + color2.alpha() * (1 - p));
400
+ },
401
+ };
402
+
403
+ // Model conversion methods and static constructors
404
+ for (const model of Object.keys(convert)) {
405
+ if (skippedModels.includes(model)) {
406
+ continue;
407
+ }
408
+
409
+ const {channels} = convert[model];
410
+
411
+ // Conversion methods
412
+ Color.prototype[model] = function (...args) {
413
+ if (this.model === model) {
414
+ return new Color(this);
415
+ }
416
+
417
+ if (args.length > 0) {
418
+ return new Color(args, model);
419
+ }
420
+
421
+ return new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);
422
+ };
423
+
424
+ // 'static' construction methods
425
+ Color[model] = function (...args) {
426
+ let color = args[0];
427
+ if (typeof color === 'number') {
428
+ color = zeroArray(args, channels);
429
+ }
430
+
431
+ return new Color(color, model);
432
+ };
433
+ }
434
+
435
+ function roundTo(number, places) {
436
+ return Number(number.toFixed(places));
437
+ }
438
+
439
+ function roundToPlace(places) {
440
+ return function (number) {
441
+ return roundTo(number, places);
442
+ };
443
+ }
444
+
445
+ function getset(model, channel, modifier) {
446
+ model = Array.isArray(model) ? model : [model];
447
+
448
+ for (const m of model) {
449
+ (limiters[m] || (limiters[m] = []))[channel] = modifier;
450
+ }
451
+
452
+ model = model[0];
453
+
454
+ return function (value) {
455
+ let result;
456
+
457
+ if (value !== undefined) {
458
+ if (modifier) {
459
+ value = modifier(value);
460
+ }
461
+
462
+ result = this[model]();
463
+ result.color[channel] = value;
464
+ return result;
465
+ }
466
+
467
+ result = this[model]().color[channel];
468
+ if (modifier) {
469
+ result = modifier(result);
470
+ }
471
+
472
+ return result;
473
+ };
474
+ }
475
+
476
+ function maxfn(max) {
477
+ return function (v) {
478
+ return Math.max(0, Math.min(max, v));
479
+ };
480
+ }
481
+
482
+ function assertArray(value) {
483
+ return Array.isArray(value) ? value : [value];
484
+ }
485
+
486
+ function zeroArray(array, length) {
487
+ for (let i = 0; i < length; i++) {
488
+ if (typeof array[i] !== 'number') {
489
+ array[i] = 0;
490
+ }
491
+ }
492
+
493
+ return array;
494
+ }
495
+
496
+ module.exports = Color;
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "color",
3
+ "version": "4.2.3",
4
+ "description": "Color conversion and manipulation with CSS string support",
5
+ "sideEffects": false,
6
+ "keywords": [
7
+ "color",
8
+ "colour",
9
+ "css"
10
+ ],
11
+ "authors": [
12
+ "Josh Junon <josh@junon.me>",
13
+ "Heather Arthur <fayearthur@gmail.com>",
14
+ "Maxime Thirouin"
15
+ ],
16
+ "license": "MIT",
17
+ "repository": "Qix-/color",
18
+ "xo": {
19
+ "rules": {
20
+ "no-cond-assign": 0,
21
+ "new-cap": 0,
22
+ "unicorn/prefer-module": 0,
23
+ "no-mixed-operators": 0,
24
+ "complexity": 0,
25
+ "unicorn/numeric-separators-style": 0
26
+ }
27
+ },
28
+ "files": [
29
+ "LICENSE",
30
+ "index.js"
31
+ ],
32
+ "scripts": {
33
+ "pretest": "xo",
34
+ "test": "mocha"
35
+ },
36
+ "engines": {
37
+ "node": ">=12.5.0"
38
+ },
39
+ "dependencies": {
40
+ "color-convert": "^2.0.1",
41
+ "color-string": "^1.9.0"
42
+ },
43
+ "devDependencies": {
44
+ "mocha": "9.0.2",
45
+ "xo": "0.42.0"
46
+ }
47
+ }
@@ -0,0 +1,54 @@
1
+ # 1.0.0 - 2016-01-07
2
+
3
+ - Removed: unused speed test
4
+ - Added: Automatic routing between previously unsupported conversions
5
+ ([#27](https://github.com/Qix-/color-convert/pull/27))
6
+ - Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions
7
+ ([#27](https://github.com/Qix-/color-convert/pull/27))
8
+ - Removed: `convert()` class
9
+ ([#27](https://github.com/Qix-/color-convert/pull/27))
10
+ - Changed: all functions to lookup dictionary
11
+ ([#27](https://github.com/Qix-/color-convert/pull/27))
12
+ - Changed: `ansi` to `ansi256`
13
+ ([#27](https://github.com/Qix-/color-convert/pull/27))
14
+ - Fixed: argument grouping for functions requiring only one argument
15
+ ([#27](https://github.com/Qix-/color-convert/pull/27))
16
+
17
+ # 0.6.0 - 2015-07-23
18
+
19
+ - Added: methods to handle
20
+ [ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors:
21
+ - rgb2ansi16
22
+ - rgb2ansi
23
+ - hsl2ansi16
24
+ - hsl2ansi
25
+ - hsv2ansi16
26
+ - hsv2ansi
27
+ - hwb2ansi16
28
+ - hwb2ansi
29
+ - cmyk2ansi16
30
+ - cmyk2ansi
31
+ - keyword2ansi16
32
+ - keyword2ansi
33
+ - ansi162rgb
34
+ - ansi162hsl
35
+ - ansi162hsv
36
+ - ansi162hwb
37
+ - ansi162cmyk
38
+ - ansi162keyword
39
+ - ansi2rgb
40
+ - ansi2hsl
41
+ - ansi2hsv
42
+ - ansi2hwb
43
+ - ansi2cmyk
44
+ - ansi2keyword
45
+ ([#18](https://github.com/harthur/color-convert/pull/18))
46
+
47
+ # 0.5.3 - 2015-06-02
48
+
49
+ - Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]`
50
+ ([#15](https://github.com/harthur/color-convert/issues/15))
51
+
52
+ ---
53
+
54
+ Check out commit logs for older releases