@mhmo91/schmancy 0.8.3 → 0.8.6

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 (365) hide show
  1. package/dist/{animated-text-Bc3qyXjp.cjs → animated-text-B3DQRJBy.cjs} +2 -2
  2. package/dist/{animated-text-Bc3qyXjp.cjs.map → animated-text-B3DQRJBy.cjs.map} +1 -1
  3. package/dist/{animated-text-CNx6Pmlo.js → animated-text-BAj4-6hE.js} +3 -3
  4. package/dist/{animated-text-CNx6Pmlo.js.map → animated-text-BAj4-6hE.js.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-7mWxekxE.js → area.component-CP4DZ0d8.js} +3 -3
  9. package/dist/{area.component-7mWxekxE.js.map → area.component-CP4DZ0d8.js.map} +1 -1
  10. package/dist/{area.component-CS_gSutH.cjs → area.component-ChxSLt16.cjs} +2 -2
  11. package/dist/{area.component-CS_gSutH.cjs.map → area.component-ChxSLt16.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-y-IyzH4r.cjs → autocomplete-CAaVSg4g.cjs} +2 -2
  14. package/dist/{autocomplete-y-IyzH4r.cjs.map → autocomplete-CAaVSg4g.cjs.map} +1 -1
  15. package/dist/{autocomplete-Ci4jo3Ur.js → autocomplete-CGbACUYd.js} +4 -4
  16. package/dist/{autocomplete-Ci4jo3Ur.js.map → autocomplete-CGbACUYd.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/{avatar-DBfJucB9.cjs → avatar-nWOZXEsW.cjs} +3 -3
  20. package/dist/avatar-nWOZXEsW.cjs.map +1 -0
  21. package/dist/{avatar-BdyuuIk7.js → avatar-rLCF6MSI.js} +58 -58
  22. package/dist/avatar-rLCF6MSI.js.map +1 -0
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-CowHieO2.js → boat-Ckt9v__d.js} +3 -3
  26. package/dist/{boat-CowHieO2.js.map → boat-Ckt9v__d.js.map} +1 -1
  27. package/dist/{boat-DkNUc1UO.cjs → boat-yNAZ2LLB.cjs} +2 -2
  28. package/dist/{boat-DkNUc1UO.cjs.map → boat-yNAZ2LLB.cjs.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/busy.cjs +1 -1
  32. package/dist/busy.js +1 -1
  33. package/dist/button.cjs +1 -1
  34. package/dist/button.js +1 -1
  35. package/dist/card.cjs +1 -1
  36. package/dist/card.js +1 -1
  37. package/dist/charts.cjs +1 -1
  38. package/dist/charts.js +1 -1
  39. package/dist/{checkbox-BvWcABPr.cjs → checkbox-BnAlpsJN.cjs} +2 -2
  40. package/dist/{checkbox-BvWcABPr.cjs.map → checkbox-BnAlpsJN.cjs.map} +1 -1
  41. package/dist/{checkbox-BY4Sn8F2.js → checkbox-D22yfGe3.js} +2 -2
  42. package/dist/{checkbox-BY4Sn8F2.js.map → checkbox-D22yfGe3.js.map} +1 -1
  43. package/dist/checkbox.cjs +1 -1
  44. package/dist/checkbox.js +1 -1
  45. package/dist/chips.cjs +1 -1
  46. package/dist/chips.js +2 -2
  47. package/dist/code-highlight.cjs +1 -1
  48. package/dist/code-highlight.js +1 -1
  49. package/dist/{code-preview-CYjmAxfs.js → code-preview-DPlQayFd.js} +2 -2
  50. package/dist/{code-preview-CYjmAxfs.js.map → code-preview-DPlQayFd.js.map} +1 -1
  51. package/dist/{code-preview-BIFIJigy.cjs → code-preview-jPnX60FF.cjs} +2 -2
  52. package/dist/{code-preview-BIFIJigy.cjs.map → code-preview-jPnX60FF.cjs.map} +1 -1
  53. package/dist/components.cjs +1 -1
  54. package/dist/components.js +1 -1
  55. package/dist/content-drawer.cjs +1 -1
  56. package/dist/content-drawer.js +1 -1
  57. package/dist/{date-range-BdIqI7LC.js → date-range-GFm5NG33.js} +4 -4
  58. package/dist/{date-range-BdIqI7LC.js.map → date-range-GFm5NG33.js.map} +1 -1
  59. package/dist/{date-range-inline-Df8u6Ecy.cjs → date-range-inline-CgX2o0FP.cjs} +2 -2
  60. package/dist/{date-range-inline-Df8u6Ecy.cjs.map → date-range-inline-CgX2o0FP.cjs.map} +1 -1
  61. package/dist/{date-range-inline-Cnhs9atd.js → date-range-inline-DTQLESAZ.js} +3 -3
  62. package/dist/{date-range-inline-Cnhs9atd.js.map → date-range-inline-DTQLESAZ.js.map} +1 -1
  63. package/dist/date-range-inline.cjs +1 -1
  64. package/dist/date-range-inline.js +1 -1
  65. package/dist/{date-range-B80Ummtv.cjs → date-range-ug3B9CFT.cjs} +2 -2
  66. package/dist/{date-range-B80Ummtv.cjs.map → date-range-ug3B9CFT.cjs.map} +1 -1
  67. package/dist/date-range.cjs +1 -1
  68. package/dist/date-range.js +1 -1
  69. package/dist/{delay-BWsVHQib.cjs → delay-CWtBL0VD.cjs} +2 -2
  70. package/dist/{delay-BWsVHQib.cjs.map → delay-CWtBL0VD.cjs.map} +1 -1
  71. package/dist/{delay-CCa9nN4A.js → delay-DEe1CmHc.js} +2 -2
  72. package/dist/{delay-CCa9nN4A.js.map → delay-DEe1CmHc.js.map} +1 -1
  73. package/dist/delay.cjs +1 -1
  74. package/dist/delay.js +1 -1
  75. package/dist/{details-Bee5ya0L.js → details-D-LXW23W.js} +2 -2
  76. package/dist/{details-Bee5ya0L.js.map → details-D-LXW23W.js.map} +1 -1
  77. package/dist/{details-oaVHXU7U.cjs → details-DVke77dU.cjs} +2 -2
  78. package/dist/{details-oaVHXU7U.cjs.map → details-DVke77dU.cjs.map} +1 -1
  79. package/dist/details.cjs +1 -1
  80. package/dist/details.js +1 -1
  81. package/dist/dialog.cjs +1 -1
  82. package/dist/{dialog.component-BriB-kFi.cjs → dialog.component-BM0D-hK9.cjs} +2 -2
  83. package/dist/{dialog.component-BriB-kFi.cjs.map → dialog.component-BM0D-hK9.cjs.map} +1 -1
  84. package/dist/{dialog.component-CMUoCC7O.js → dialog.component-a7FlKhGD.js} +3 -3
  85. package/dist/{dialog.component-CMUoCC7O.js.map → dialog.component-a7FlKhGD.js.map} +1 -1
  86. package/dist/dialog.js +1 -1
  87. package/dist/{divider-B7DBbYFI.js → divider-CzTpxOqt.js} +3 -3
  88. package/dist/{divider-B7DBbYFI.js.map → divider-CzTpxOqt.js.map} +1 -1
  89. package/dist/{divider-Dl4TToQZ.cjs → divider-D8KStUhN.cjs} +2 -2
  90. package/dist/{divider-Dl4TToQZ.cjs.map → divider-D8KStUhN.cjs.map} +1 -1
  91. package/dist/divider.cjs +1 -1
  92. package/dist/divider.js +1 -1
  93. package/dist/{dropdown-content-C2W7OttQ.cjs → dropdown-content-CngZN3vv.cjs} +2 -2
  94. package/dist/{dropdown-content-C2W7OttQ.cjs.map → dropdown-content-CngZN3vv.cjs.map} +1 -1
  95. package/dist/{dropdown-content-DzhOtilY.js → dropdown-content-DCn-g0-f.js} +3 -3
  96. package/dist/{dropdown-content-DzhOtilY.js.map → dropdown-content-DCn-g0-f.js.map} +1 -1
  97. package/dist/dropdown.cjs +1 -1
  98. package/dist/dropdown.js +1 -1
  99. package/dist/{email-recipients-Bh5VC0rc.cjs → email-recipients-BhntMZMf.cjs} +2 -2
  100. package/dist/{email-recipients-Bh5VC0rc.cjs.map → email-recipients-BhntMZMf.cjs.map} +1 -1
  101. package/dist/{email-recipients-BWqZKo3m.js → email-recipients-BzjAKNJ0.js} +6 -6
  102. package/dist/{email-recipients-BWqZKo3m.js.map → email-recipients-BzjAKNJ0.js.map} +1 -1
  103. package/dist/extra.cjs +1 -1
  104. package/dist/extra.js +1 -1
  105. package/dist/{flex-53G-PJx7.js → flex-5dR48zie.js} +2 -2
  106. package/dist/{flex-53G-PJx7.js.map → flex-5dR48zie.js.map} +1 -1
  107. package/dist/{flex-DFSIy0t4.cjs → flex-oHl2EfYB.cjs} +2 -2
  108. package/dist/{flex-DFSIy0t4.cjs.map → flex-oHl2EfYB.cjs.map} +1 -1
  109. package/dist/{form-Zq7g2JS8.cjs → form-BlPiAPt7.cjs} +2 -2
  110. package/dist/{form-Zq7g2JS8.cjs.map → form-BlPiAPt7.cjs.map} +1 -1
  111. package/dist/{form-BtRK9bnp.js → form-BxVM6JTn.js} +2 -2
  112. package/dist/{form-BtRK9bnp.js.map → form-BxVM6JTn.js.map} +1 -1
  113. package/dist/form.cjs +1 -1
  114. package/dist/form.js +1 -1
  115. package/dist/{formField.mixin-2jSL7WF_.js → formField.mixin-BCGA7Ea3.js} +2 -2
  116. package/dist/{formField.mixin-2jSL7WF_.js.map → formField.mixin-BCGA7Ea3.js.map} +1 -1
  117. package/dist/{formField.mixin-DkN2ufR_.cjs → formField.mixin-BfJMifU9.cjs} +2 -2
  118. package/dist/{formField.mixin-DkN2ufR_.cjs.map → formField.mixin-BfJMifU9.cjs.map} +1 -1
  119. package/dist/{icon-pU_cfmpD.cjs → icon-DHEXr3c-.cjs} +2 -2
  120. package/dist/{icon-pU_cfmpD.cjs.map → icon-DHEXr3c-.cjs.map} +1 -1
  121. package/dist/{icon-B5qeYrDu.js → icon-DYpLoegR.js} +2 -2
  122. package/dist/{icon-B5qeYrDu.js.map → icon-DYpLoegR.js.map} +1 -1
  123. package/dist/{icon-button-HSYaQBNF.js → icon-button-CmZBLHWC.js} +3 -3
  124. package/dist/{icon-button-HSYaQBNF.js.map → icon-button-CmZBLHWC.js.map} +1 -1
  125. package/dist/{icon-button-BpmGFjaR.cjs → icon-button-IbSX8C98.cjs} +2 -2
  126. package/dist/{icon-button-BpmGFjaR.cjs.map → icon-button-IbSX8C98.cjs.map} +1 -1
  127. package/dist/icons.cjs +1 -1
  128. package/dist/icons.js +1 -1
  129. package/dist/index.cjs +1 -1
  130. package/dist/index.js +56 -56
  131. package/dist/{input-8G9YY9qv.cjs → input-BByjYlgl.cjs} +2 -2
  132. package/dist/{input-8G9YY9qv.cjs.map → input-BByjYlgl.cjs.map} +1 -1
  133. package/dist/{input-BJMF5Fyk.js → input-D0cQ9DOY.js} +3 -3
  134. package/dist/{input-BJMF5Fyk.js.map → input-D0cQ9DOY.js.map} +1 -1
  135. package/dist/{input-chip-tbrw56ix.js → input-chip-B5ErXgCB.js} +2 -2
  136. package/dist/{input-chip-tbrw56ix.js.map → input-chip-B5ErXgCB.js.map} +1 -1
  137. package/dist/{input-chip-CocdqTzr.cjs → input-chip-DkWaTciP.cjs} +2 -2
  138. package/dist/{input-chip-CocdqTzr.cjs.map → input-chip-DkWaTciP.cjs.map} +1 -1
  139. package/dist/input.cjs +1 -1
  140. package/dist/input.js +1 -1
  141. package/dist/{json-DPnyOA3K.cjs → json-BZVe74np.cjs} +2 -2
  142. package/dist/{json-DPnyOA3K.cjs.map → json-BZVe74np.cjs.map} +1 -1
  143. package/dist/{json-CvcloKQv.js → json-PKewOWuJ.js} +3 -3
  144. package/dist/{json-CvcloKQv.js.map → json-PKewOWuJ.js.map} +1 -1
  145. package/dist/json.cjs +1 -1
  146. package/dist/json.js +1 -1
  147. package/dist/layout.cjs +1 -1
  148. package/dist/layout.js +2 -2
  149. package/dist/{lightbox-service-3mHqBKEh.cjs → lightbox-service-D-0JtxB1.cjs} +2 -2
  150. package/dist/lightbox-service-D-0JtxB1.cjs.map +1 -0
  151. package/dist/{lightbox-service-DxbYZAuv.js → lightbox-service-DZMnb1eU.js} +3 -3
  152. package/dist/lightbox-service-DZMnb1eU.js.map +1 -0
  153. package/dist/lightbox.cjs +1 -1
  154. package/dist/lightbox.js +1 -1
  155. package/dist/{list-JjR7WOrd.cjs → list-B_2m7l3g.cjs} +6 -6
  156. package/dist/list-B_2m7l3g.cjs.map +1 -0
  157. package/dist/{list-FWXmY-eQ.js → list-CW56LV-v.js} +13 -13
  158. package/dist/list-CW56LV-v.js.map +1 -0
  159. package/dist/list.cjs +1 -1
  160. package/dist/list.js +1 -1
  161. package/dist/{litElement.mixin-BVBdv0GP.cjs → litElement.mixin-CrpeGpZ7.cjs} +2 -2
  162. package/dist/{litElement.mixin-BVBdv0GP.cjs.map → litElement.mixin-CrpeGpZ7.cjs.map} +1 -1
  163. package/dist/{litElement.mixin-Wcu4yIIs.js → litElement.mixin-DHZXtvYq.js} +2 -2
  164. package/dist/{litElement.mixin-Wcu4yIIs.js.map → litElement.mixin-DHZXtvYq.js.map} +1 -1
  165. package/dist/mailbox.cjs +1 -1
  166. package/dist/mailbox.js +1 -1
  167. package/dist/{map-Br6xJFxG.js → map-2Hl60a0A.js} +6 -6
  168. package/dist/{map-Br6xJFxG.js.map → map-2Hl60a0A.js.map} +1 -1
  169. package/dist/{map-D9R3OCne.cjs → map-DyPS9G7M.cjs} +3 -3
  170. package/dist/{map-D9R3OCne.cjs.map → map-DyPS9G7M.cjs.map} +1 -1
  171. package/dist/map.cjs +1 -1
  172. package/dist/map.js +1 -1
  173. package/dist/{media-DibPwAjJ.cjs → media-CS8HpKnK.cjs} +2 -2
  174. package/dist/{media-DibPwAjJ.cjs.map → media-CS8HpKnK.cjs.map} +1 -1
  175. package/dist/{media-BV_1DfcW.js → media-DtWbcRxL.js} +2 -2
  176. package/dist/{media-BV_1DfcW.js.map → media-DtWbcRxL.js.map} +1 -1
  177. package/dist/{menu-HKqlq99V.js → menu-Caju5-zd.js} +3 -3
  178. package/dist/{menu-HKqlq99V.js.map → menu-Caju5-zd.js.map} +1 -1
  179. package/dist/{menu-vNrV-Nuq.cjs → menu-rX5RPAI2.cjs} +2 -2
  180. package/dist/{menu-vNrV-Nuq.cjs.map → menu-rX5RPAI2.cjs.map} +1 -1
  181. package/dist/menu.cjs +1 -1
  182. package/dist/menu.js +1 -1
  183. package/dist/mixins.cjs +1 -1
  184. package/dist/mixins.js +3 -3
  185. package/dist/nav-drawer.cjs +1 -1
  186. package/dist/nav-drawer.js +1 -1
  187. package/dist/navigation-bar.cjs +1 -1
  188. package/dist/navigation-bar.js +1 -1
  189. package/dist/{navigation-rail-DKXumnmt.js → navigation-rail-Ctketq5a.js} +32 -25
  190. package/dist/navigation-rail-Ctketq5a.js.map +1 -0
  191. package/dist/{navigation-rail-D1o3qDe_.cjs → navigation-rail-DC9_oSIM.cjs} +12 -12
  192. package/dist/navigation-rail-DC9_oSIM.cjs.map +1 -0
  193. package/dist/navigation-rail.cjs +1 -1
  194. package/dist/navigation-rail.js +1 -1
  195. package/dist/{notification-service-B5ljba4P.js → notification-service-CUlfXqmj.js} +3 -3
  196. package/dist/{notification-service-B5ljba4P.js.map → notification-service-CUlfXqmj.js.map} +1 -1
  197. package/dist/{notification-service-ICRT05L0.cjs → notification-service-DknbpqTt.cjs} +2 -2
  198. package/dist/{notification-service-ICRT05L0.cjs.map → notification-service-DknbpqTt.cjs.map} +1 -1
  199. package/dist/notification.cjs +1 -1
  200. package/dist/notification.js +2 -2
  201. package/dist/{notify-B9CpO1Ru.js → notify-DJSOWTxv.js} +2 -2
  202. package/dist/{notify-B9CpO1Ru.js.map → notify-DJSOWTxv.js.map} +1 -1
  203. package/dist/{notify-NX-dl60E.cjs → notify-DickIEHW.cjs} +2 -2
  204. package/dist/{notify-NX-dl60E.cjs.map → notify-DickIEHW.cjs.map} +1 -1
  205. package/dist/{option-B4JKMrLg.js → option-Bng41-rY.js} +2 -2
  206. package/dist/{option-B4JKMrLg.js.map → option-Bng41-rY.js.map} +1 -1
  207. package/dist/{option-epyXLWoY.cjs → option-DYT5Rkgy.cjs} +2 -2
  208. package/dist/{option-epyXLWoY.cjs.map → option-DYT5Rkgy.cjs.map} +1 -1
  209. package/dist/option.cjs +1 -1
  210. package/dist/option.js +1 -1
  211. package/dist/{page-Bmi1QHtq.cjs → page-BLn9gtSd.cjs} +2 -2
  212. package/dist/{page-Bmi1QHtq.cjs.map → page-BLn9gtSd.cjs.map} +1 -1
  213. package/dist/{page-BpygEntU.js → page-D-ROcQDd.js} +4 -4
  214. package/dist/{page-BpygEntU.js.map → page-D-ROcQDd.js.map} +1 -1
  215. package/dist/page.cjs +1 -1
  216. package/dist/page.js +1 -1
  217. package/dist/{payment-card-form-3kAXDbXf.cjs → payment-card-form-5UtfWzoW.cjs} +2 -2
  218. package/dist/{payment-card-form-3kAXDbXf.cjs.map → payment-card-form-5UtfWzoW.cjs.map} +1 -1
  219. package/dist/{payment-card-form-BxkHuSls.js → payment-card-form-BJa4RgF2.js} +3 -3
  220. package/dist/{payment-card-form-BxkHuSls.js.map → payment-card-form-BJa4RgF2.js.map} +1 -1
  221. package/dist/{pills-C3fIvfn8.js → pills-BS5rZ6C3.js} +3 -3
  222. package/dist/{pills-C3fIvfn8.js.map → pills-BS5rZ6C3.js.map} +1 -1
  223. package/dist/{pills-MmHyBGQu.cjs → pills-Blf7IAeq.cjs} +2 -2
  224. package/dist/{pills-MmHyBGQu.cjs.map → pills-Blf7IAeq.cjs.map} +1 -1
  225. package/dist/{progress-qx8jtrOA.cjs → progress-DlhYniW_.cjs} +5 -5
  226. package/dist/progress-DlhYniW_.cjs.map +1 -0
  227. package/dist/{progress-0POmJs5o.js → progress-yTIX6EqC.js} +10 -13
  228. package/dist/progress-yTIX6EqC.js.map +1 -0
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{qr-scanner-DQq-WLyo.cjs → qr-scanner-DOs7uNS_.cjs} +2 -2
  232. package/dist/{qr-scanner-DQq-WLyo.cjs.map → qr-scanner-DOs7uNS_.cjs.map} +1 -1
  233. package/dist/{qr-scanner-jwOSrD0N.js → qr-scanner-DjZ8mgHV.js} +2 -2
  234. package/dist/{qr-scanner-jwOSrD0N.js.map → qr-scanner-DjZ8mgHV.js.map} +1 -1
  235. package/dist/qr-scanner.cjs +1 -1
  236. package/dist/qr-scanner.js +1 -1
  237. package/dist/{radio-button-DraEYR2R.cjs → radio-button-N_PrrxKB.cjs} +2 -2
  238. package/dist/{radio-button-DraEYR2R.cjs.map → radio-button-N_PrrxKB.cjs.map} +1 -1
  239. package/dist/{radio-button-B0EUK_wg.js → radio-button-me3SRHGu.js} +3 -3
  240. package/dist/{radio-button-B0EUK_wg.js.map → radio-button-me3SRHGu.js.map} +1 -1
  241. package/dist/radio-group.cjs +1 -1
  242. package/dist/radio-group.js +1 -1
  243. package/dist/{schmancy-steps-container-C2StAA5K.js → schmancy-steps-container-J6P-NNNj.js} +2 -2
  244. package/dist/{schmancy-steps-container-C2StAA5K.js.map → schmancy-steps-container-J6P-NNNj.js.map} +1 -1
  245. package/dist/{schmancy-steps-container-B5aiqgMA.cjs → schmancy-steps-container-T57BKMzi.cjs} +2 -2
  246. package/dist/{schmancy-steps-container-B5aiqgMA.cjs.map → schmancy-steps-container-T57BKMzi.cjs.map} +1 -1
  247. package/dist/{scroll-Bu-vAg3d.js → scroll-C_gfUgjn.js} +2 -2
  248. package/dist/{scroll-Bu-vAg3d.js.map → scroll-C_gfUgjn.js.map} +1 -1
  249. package/dist/{scroll-BqT7bvhu.cjs → scroll-CecsowP7.cjs} +2 -2
  250. package/dist/{scroll-BqT7bvhu.cjs.map → scroll-CecsowP7.cjs.map} +1 -1
  251. package/dist/{select-i-uKur-W.js → select-BBA0gBHf.js} +3 -3
  252. package/dist/{select-i-uKur-W.js.map → select-BBA0gBHf.js.map} +1 -1
  253. package/dist/{select-HiEGJvOX.cjs → select-D9oCjv7N.cjs} +2 -2
  254. package/dist/{select-HiEGJvOX.cjs.map → select-D9oCjv7N.cjs.map} +1 -1
  255. package/dist/select.cjs +1 -1
  256. package/dist/select.js +1 -1
  257. package/dist/{sheet-BbrRW0S5.cjs → sheet-0oUfBmXX.cjs} +2 -2
  258. package/dist/{sheet-BbrRW0S5.cjs.map → sheet-0oUfBmXX.cjs.map} +1 -1
  259. package/dist/{sheet-B1g7E4dQ.js → sheet-CNcDT3VP.js} +5 -5
  260. package/dist/{sheet-B1g7E4dQ.js.map → sheet-CNcDT3VP.js.map} +1 -1
  261. package/dist/sheet.cjs +1 -1
  262. package/dist/sheet.js +2 -2
  263. package/dist/{sheet.service-4etIM-p6.js → sheet.service-2MobB-9z.js} +2 -2
  264. package/dist/{sheet.service-4etIM-p6.js.map → sheet.service-2MobB-9z.js.map} +1 -1
  265. package/dist/{sheet.service-BiRZjCdN.cjs → sheet.service-su_7yDQ-.cjs} +2 -2
  266. package/dist/{sheet.service-BiRZjCdN.cjs.map → sheet.service-su_7yDQ-.cjs.map} +1 -1
  267. package/dist/{slider-VYnbIRH2.cjs → slider-CV-Ehp_5.cjs} +2 -2
  268. package/dist/{slider-VYnbIRH2.cjs.map → slider-CV-Ehp_5.cjs.map} +1 -1
  269. package/dist/{slider-8E3Wad0t.js → slider-CkE-iFUy.js} +3 -3
  270. package/dist/{slider-8E3Wad0t.js.map → slider-CkE-iFUy.js.map} +1 -1
  271. package/dist/slider.cjs +1 -1
  272. package/dist/slider.js +1 -1
  273. package/dist/{spinner-DJgcI5wr.cjs → spinner-Bfn8KC-9.cjs} +2 -2
  274. package/dist/{spinner-DJgcI5wr.cjs.map → spinner-Bfn8KC-9.cjs.map} +1 -1
  275. package/dist/{spinner-CKm13CKN.js → spinner-DiMbWXp9.js} +2 -2
  276. package/dist/{spinner-CKm13CKN.js.map → spinner-DiMbWXp9.js.map} +1 -1
  277. package/dist/steps.cjs +1 -1
  278. package/dist/steps.js +1 -1
  279. package/dist/{suggestion-chip-6njXvvHm.js → suggestion-chip-CEDqUNoS.js} +3 -3
  280. package/dist/{suggestion-chip-6njXvvHm.js.map → suggestion-chip-CEDqUNoS.js.map} +1 -1
  281. package/dist/{suggestion-chip-DdLfqk7o.cjs → suggestion-chip-HhsLtZXR.cjs} +2 -2
  282. package/dist/{suggestion-chip-DdLfqk7o.cjs.map → suggestion-chip-HhsLtZXR.cjs.map} +1 -1
  283. package/dist/{surface-DcqbWGub.cjs → surface-CW3H23Va.cjs} +2 -2
  284. package/dist/{surface-DcqbWGub.cjs.map → surface-CW3H23Va.cjs.map} +1 -1
  285. package/dist/{surface-BYU3l_Q2.js → surface-eBfnSwQS.js} +2 -2
  286. package/dist/{surface-BYU3l_Q2.js.map → surface-eBfnSwQS.js.map} +1 -1
  287. package/dist/surface.cjs +1 -1
  288. package/dist/surface.js +1 -1
  289. package/dist/{table-C9fzDjjk.cjs → table-D0tiSL_u.cjs} +2 -2
  290. package/dist/{table-C9fzDjjk.cjs.map → table-D0tiSL_u.cjs.map} +1 -1
  291. package/dist/{table-Dq12ollZ.js → table-Dmo4TvTx.js} +2 -2
  292. package/dist/{table-Dq12ollZ.js.map → table-Dmo4TvTx.js.map} +1 -1
  293. package/dist/table.cjs +1 -1
  294. package/dist/table.js +1 -1
  295. package/dist/{tabs-compatibility-wnzlHtln.js → tabs-compatibility-Bit6y6en.js} +2 -2
  296. package/dist/{tabs-compatibility-wnzlHtln.js.map → tabs-compatibility-Bit6y6en.js.map} +1 -1
  297. package/dist/{tabs-compatibility-Dwtjfkcf.cjs → tabs-compatibility-Vq_2-ekz.cjs} +2 -2
  298. package/dist/{tabs-compatibility-Dwtjfkcf.cjs.map → tabs-compatibility-Vq_2-ekz.cjs.map} +1 -1
  299. package/dist/tabs.cjs +1 -1
  300. package/dist/tabs.js +1 -1
  301. package/dist/{tailwind.mixin-Ddt05Frc.js → tailwind.mixin-Bp_PR6yc.js} +2 -2
  302. package/dist/{tailwind.mixin-Ddt05Frc.js.map → tailwind.mixin-Bp_PR6yc.js.map} +1 -1
  303. package/dist/{tailwind.mixin-UijsBrYW.cjs → tailwind.mixin-Cp4PyXok.cjs} +2 -2
  304. package/dist/{tailwind.mixin-UijsBrYW.cjs.map → tailwind.mixin-Cp4PyXok.cjs.map} +1 -1
  305. package/dist/teleport.cjs +1 -1
  306. package/dist/teleport.js +1 -1
  307. package/dist/{textarea-Vd3zayJZ.js → textarea-B1d1QCqT.js} +2 -2
  308. package/dist/{textarea-Vd3zayJZ.js.map → textarea-B1d1QCqT.js.map} +1 -1
  309. package/dist/{textarea-DGmsw1B_.cjs → textarea-DG8CHhZA.cjs} +2 -2
  310. package/dist/{textarea-DGmsw1B_.cjs.map → textarea-DG8CHhZA.cjs.map} +1 -1
  311. package/dist/textarea.cjs +1 -1
  312. package/dist/textarea.js +1 -1
  313. package/dist/{theme-button-DG_Xwg9H.cjs → theme-button-CPL6Eaqd.cjs} +2 -2
  314. package/dist/{theme-button-DG_Xwg9H.cjs.map → theme-button-CPL6Eaqd.cjs.map} +1 -1
  315. package/dist/{theme-button-rGpEW_xS.js → theme-button-CrLuMQNe.js} +2 -2
  316. package/dist/{theme-button-rGpEW_xS.js.map → theme-button-CrLuMQNe.js.map} +1 -1
  317. package/dist/theme-button.cjs +1 -1
  318. package/dist/theme-button.js +1 -1
  319. package/dist/{theme-controller-boat-pLzK5zxL.cjs → theme-controller-boat-CXbNJSI3.cjs} +2 -2
  320. package/dist/{theme-controller-boat-pLzK5zxL.cjs.map → theme-controller-boat-CXbNJSI3.cjs.map} +1 -1
  321. package/dist/{theme-controller-boat-B1fjcqJI.js → theme-controller-boat-CzSmjyKq.js} +3 -3
  322. package/dist/{theme-controller-boat-B1fjcqJI.js.map → theme-controller-boat-CzSmjyKq.js.map} +1 -1
  323. package/dist/theme.cjs +1 -1
  324. package/dist/theme.js +1 -1
  325. package/dist/{timezone-IQkwr6Oh.js → timezone-4vwX0BgA.js} +3 -3
  326. package/dist/{timezone-IQkwr6Oh.js.map → timezone-4vwX0BgA.js.map} +1 -1
  327. package/dist/{timezone-BhUaIAV7.cjs → timezone-BxvQcqe1.cjs} +2 -2
  328. package/dist/{timezone-BhUaIAV7.cjs.map → timezone-BxvQcqe1.cjs.map} +1 -1
  329. package/dist/{tooltip-CwaiZC8f.js → tooltip-CjdvBf4X.js} +2 -2
  330. package/dist/{tooltip-CwaiZC8f.js.map → tooltip-CjdvBf4X.js.map} +1 -1
  331. package/dist/{tooltip-iEvxKg8g.cjs → tooltip-ZtnGjoJd.cjs} +2 -2
  332. package/dist/{tooltip-iEvxKg8g.cjs.map → tooltip-ZtnGjoJd.cjs.map} +1 -1
  333. package/dist/tooltip.cjs +1 -1
  334. package/dist/tooltip.js +1 -1
  335. package/dist/{tree-D9EbEsxn.js → tree-CBEjV7jP.js} +2 -2
  336. package/dist/{tree-D9EbEsxn.js.map → tree-CBEjV7jP.js.map} +1 -1
  337. package/dist/{tree-Bclu6uvv.cjs → tree-DP5U00NA.cjs} +2 -2
  338. package/dist/{tree-Bclu6uvv.cjs.map → tree-DP5U00NA.cjs.map} +1 -1
  339. package/dist/tree.cjs +1 -1
  340. package/dist/tree.js +1 -1
  341. package/dist/{typewriter-Bscwd-36.cjs → typewriter-C6kFjLcX.cjs} +2 -2
  342. package/dist/{typewriter-Bscwd-36.cjs.map → typewriter-C6kFjLcX.cjs.map} +1 -1
  343. package/dist/{typewriter-BjDPgRlj.js → typewriter-Eo5qXoGC.js} +4 -4
  344. package/dist/{typewriter-BjDPgRlj.js.map → typewriter-Eo5qXoGC.js.map} +1 -1
  345. package/dist/typewriter.cjs +1 -1
  346. package/dist/typewriter.js +1 -1
  347. package/dist/{typography-CConBBFH.js → typography-C_1gdM2I.js} +2 -2
  348. package/dist/{typography-CConBBFH.js.map → typography-C_1gdM2I.js.map} +1 -1
  349. package/dist/{typography-DLGT3DGz.cjs → typography-DGyjlLCE.cjs} +2 -2
  350. package/dist/{typography-DLGT3DGz.cjs.map → typography-DGyjlLCE.cjs.map} +1 -1
  351. package/dist/typography.cjs +1 -1
  352. package/dist/typography.js +1 -1
  353. package/package.json +1 -1
  354. package/types/src/navigation-rail/navigation-rail.d.ts +2 -0
  355. package/types/src/progress/progress.d.ts +1 -1
  356. package/dist/avatar-BdyuuIk7.js.map +0 -1
  357. package/dist/avatar-DBfJucB9.cjs.map +0 -1
  358. package/dist/lightbox-service-3mHqBKEh.cjs.map +0 -1
  359. package/dist/lightbox-service-DxbYZAuv.js.map +0 -1
  360. package/dist/list-FWXmY-eQ.js.map +0 -1
  361. package/dist/list-JjR7WOrd.cjs.map +0 -1
  362. package/dist/navigation-rail-D1o3qDe_.cjs.map +0 -1
  363. package/dist/navigation-rail-DKXumnmt.js.map +0 -1
  364. package/dist/progress-0POmJs5o.js.map +0 -1
  365. package/dist/progress-qx8jtrOA.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"theme-controller-boat-B1fjcqJI.js","sources":["../node_modules/@material/material-color-utilities/utils/math_utils.js","../node_modules/@material/material-color-utilities/utils/color_utils.js","../node_modules/@material/material-color-utilities/hct/viewing_conditions.js","../node_modules/@material/material-color-utilities/hct/cam16.js","../node_modules/@material/material-color-utilities/hct/hct_solver.js","../node_modules/@material/material-color-utilities/hct/hct.js","../node_modules/@material/material-color-utilities/blend/blend.js","../node_modules/@material/material-color-utilities/contrast/contrast.js","../node_modules/@material/material-color-utilities/dislike/dislike_analyzer.js","../node_modules/@material/material-color-utilities/dynamiccolor/dynamic_color.js","../node_modules/@material/material-color-utilities/palettes/tonal_palette.js","../node_modules/@material/material-color-utilities/dynamiccolor/contrast_curve.js","../node_modules/@material/material-color-utilities/dynamiccolor/tone_delta_pair.js","../node_modules/@material/material-color-utilities/dynamiccolor/variant.js","../node_modules/@material/material-color-utilities/dynamiccolor/material_dynamic_colors.js","../node_modules/@material/material-color-utilities/palettes/core_palette.js","../node_modules/@material/material-color-utilities/scheme/scheme.js","../node_modules/@material/material-color-utilities/utils/string_utils.js","../node_modules/@material/material-color-utilities/utils/theme_utils.js","../src/theme/theme.format.ts","../src/theme/theme.service.ts","../src/theme/context.ts","../src/theme/theme.component.ts","../src/theme/theme-controller.ts","../src/theme/theme-audio-player.ts","../src/theme/theme-controller-boat.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\n/**\n * Utility methods for mathematical operations.\n */\n/**\n * The signum function.\n *\n * @return 1 if num > 0, -1 if num < 0, and 0 if num = 0\n */\nexport function signum(num) {\n if (num < 0) {\n return -1;\n }\n else if (num === 0) {\n return 0;\n }\n else {\n return 1;\n }\n}\n/**\n * The linear interpolation function.\n *\n * @return start if amount = 0 and stop if amount = 1\n */\nexport function lerp(start, stop, amount) {\n return (1.0 - amount) * start + amount * stop;\n}\n/**\n * Clamps an integer between two integers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampInt(min, max, input) {\n if (input < min) {\n return min;\n }\n else if (input > max) {\n return max;\n }\n return input;\n}\n/**\n * Clamps an integer between two floating-point numbers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampDouble(min, max, input) {\n if (input < min) {\n return min;\n }\n else if (input > max) {\n return max;\n }\n return input;\n}\n/**\n * Sanitizes a degree measure as an integer.\n *\n * @return a degree measure between 0 (inclusive) and 360\n * (exclusive).\n */\nexport function sanitizeDegreesInt(degrees) {\n degrees = degrees % 360;\n if (degrees < 0) {\n degrees = degrees + 360;\n }\n return degrees;\n}\n/**\n * Sanitizes a degree measure as a floating-point number.\n *\n * @return a degree measure between 0.0 (inclusive) and 360.0\n * (exclusive).\n */\nexport function sanitizeDegreesDouble(degrees) {\n degrees = degrees % 360.0;\n if (degrees < 0) {\n degrees = degrees + 360.0;\n }\n return degrees;\n}\n/**\n * Sign of direction change needed to travel from one angle to\n * another.\n *\n * For angles that are 180 degrees apart from each other, both\n * directions have the same travel distance, so either direction is\n * shortest. The value 1.0 is returned in this case.\n *\n * @param from The angle travel starts from, in degrees.\n * @param to The angle travel ends at, in degrees.\n * @return -1 if decreasing from leads to the shortest travel\n * distance, 1 if increasing from leads to the shortest travel\n * distance.\n */\nexport function rotationDirection(from, to) {\n const increasingDifference = sanitizeDegreesDouble(to - from);\n return increasingDifference <= 180.0 ? 1.0 : -1.0;\n}\n/**\n * Distance of two points on a circle, represented using degrees.\n */\nexport function differenceDegrees(a, b) {\n return 180.0 - Math.abs(Math.abs(a - b) - 180.0);\n}\n/**\n * Multiplies a 1x3 row vector with a 3x3 matrix.\n */\nexport function matrixMultiply(row, matrix) {\n const a = row[0] * matrix[0][0] + row[1] * matrix[0][1] + row[2] * matrix[0][2];\n const b = row[0] * matrix[1][0] + row[1] * matrix[1][1] + row[2] * matrix[1][2];\n const c = row[0] * matrix[2][0] + row[1] * matrix[2][1] + row[2] * matrix[2][2];\n return [a, b, c];\n}\n//# sourceMappingURL=math_utils.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport * as mathUtils from './math_utils.js';\n/**\n * Color science utilities.\n *\n * Utility methods for color science constants and color space\n * conversions that aren't HCT or CAM16.\n */\nconst SRGB_TO_XYZ = [\n [0.41233895, 0.35762064, 0.18051042],\n [0.2126, 0.7152, 0.0722],\n [0.01932141, 0.11916382, 0.95034478],\n];\nconst XYZ_TO_SRGB = [\n [\n 3.2413774792388685,\n -1.5376652402851851,\n -0.49885366846268053,\n ],\n [\n -0.9691452513005321,\n 1.8758853451067872,\n 0.04156585616912061,\n ],\n [\n 0.05562093689691305,\n -0.20395524564742123,\n 1.0571799111220335,\n ],\n];\nconst WHITE_POINT_D65 = [95.047, 100.0, 108.883];\n/**\n * Converts a color from RGB components to ARGB format.\n */\nexport function argbFromRgb(red, green, blue) {\n return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>>\n 0;\n}\n/**\n * Converts a color from linear RGB components to ARGB format.\n */\nexport function argbFromLinrgb(linrgb) {\n const r = delinearized(linrgb[0]);\n const g = delinearized(linrgb[1]);\n const b = delinearized(linrgb[2]);\n return argbFromRgb(r, g, b);\n}\n/**\n * Returns the alpha component of a color in ARGB format.\n */\nexport function alphaFromArgb(argb) {\n return argb >> 24 & 255;\n}\n/**\n * Returns the red component of a color in ARGB format.\n */\nexport function redFromArgb(argb) {\n return argb >> 16 & 255;\n}\n/**\n * Returns the green component of a color in ARGB format.\n */\nexport function greenFromArgb(argb) {\n return argb >> 8 & 255;\n}\n/**\n * Returns the blue component of a color in ARGB format.\n */\nexport function blueFromArgb(argb) {\n return argb & 255;\n}\n/**\n * Returns whether a color in ARGB format is opaque.\n */\nexport function isOpaque(argb) {\n return alphaFromArgb(argb) >= 255;\n}\n/**\n * Converts a color from ARGB to XYZ.\n */\nexport function argbFromXyz(x, y, z) {\n const matrix = XYZ_TO_SRGB;\n const linearR = matrix[0][0] * x + matrix[0][1] * y + matrix[0][2] * z;\n const linearG = matrix[1][0] * x + matrix[1][1] * y + matrix[1][2] * z;\n const linearB = matrix[2][0] * x + matrix[2][1] * y + matrix[2][2] * z;\n const r = delinearized(linearR);\n const g = delinearized(linearG);\n const b = delinearized(linearB);\n return argbFromRgb(r, g, b);\n}\n/**\n * Converts a color from XYZ to ARGB.\n */\nexport function xyzFromArgb(argb) {\n const r = linearized(redFromArgb(argb));\n const g = linearized(greenFromArgb(argb));\n const b = linearized(blueFromArgb(argb));\n return mathUtils.matrixMultiply([r, g, b], SRGB_TO_XYZ);\n}\n/**\n * Converts a color represented in Lab color space into an ARGB\n * integer.\n */\nexport function argbFromLab(l, a, b) {\n const whitePoint = WHITE_POINT_D65;\n const fy = (l + 16.0) / 116.0;\n const fx = a / 500.0 + fy;\n const fz = fy - b / 200.0;\n const xNormalized = labInvf(fx);\n const yNormalized = labInvf(fy);\n const zNormalized = labInvf(fz);\n const x = xNormalized * whitePoint[0];\n const y = yNormalized * whitePoint[1];\n const z = zNormalized * whitePoint[2];\n return argbFromXyz(x, y, z);\n}\n/**\n * Converts a color from ARGB representation to L*a*b*\n * representation.\n *\n * @param argb the ARGB representation of a color\n * @return a Lab object representing the color\n */\nexport function labFromArgb(argb) {\n const linearR = linearized(redFromArgb(argb));\n const linearG = linearized(greenFromArgb(argb));\n const linearB = linearized(blueFromArgb(argb));\n const matrix = SRGB_TO_XYZ;\n const x = matrix[0][0] * linearR + matrix[0][1] * linearG + matrix[0][2] * linearB;\n const y = matrix[1][0] * linearR + matrix[1][1] * linearG + matrix[1][2] * linearB;\n const z = matrix[2][0] * linearR + matrix[2][1] * linearG + matrix[2][2] * linearB;\n const whitePoint = WHITE_POINT_D65;\n const xNormalized = x / whitePoint[0];\n const yNormalized = y / whitePoint[1];\n const zNormalized = z / whitePoint[2];\n const fx = labF(xNormalized);\n const fy = labF(yNormalized);\n const fz = labF(zNormalized);\n const l = 116.0 * fy - 16;\n const a = 500.0 * (fx - fy);\n const b = 200.0 * (fy - fz);\n return [l, a, b];\n}\n/**\n * Converts an L* value to an ARGB representation.\n *\n * @param lstar L* in L*a*b*\n * @return ARGB representation of grayscale color with lightness\n * matching L*\n */\nexport function argbFromLstar(lstar) {\n const y = yFromLstar(lstar);\n const component = delinearized(y);\n return argbFromRgb(component, component, component);\n}\n/**\n * Computes the L* value of a color in ARGB representation.\n *\n * @param argb ARGB representation of a color\n * @return L*, from L*a*b*, coordinate of the color\n */\nexport function lstarFromArgb(argb) {\n const y = xyzFromArgb(argb)[1];\n return 116.0 * labF(y / 100.0) - 16.0;\n}\n/**\n * Converts an L* value to a Y value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param lstar L* in L*a*b*\n * @return Y in XYZ\n */\nexport function yFromLstar(lstar) {\n return 100.0 * labInvf((lstar + 16.0) / 116.0);\n}\n/**\n * Converts a Y value to an L* value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param y Y in XYZ\n * @return L* in L*a*b*\n */\nexport function lstarFromY(y) {\n return labF(y / 100.0) * 116.0 - 16.0;\n}\n/**\n * Linearizes an RGB component.\n *\n * @param rgbComponent 0 <= rgb_component <= 255, represents R/G/B\n * channel\n * @return 0.0 <= output <= 100.0, color channel converted to\n * linear RGB space\n */\nexport function linearized(rgbComponent) {\n const normalized = rgbComponent / 255.0;\n if (normalized <= 0.040449936) {\n return normalized / 12.92 * 100.0;\n }\n else {\n return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100.0;\n }\n}\n/**\n * Delinearizes an RGB component.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0 <= output <= 255, color channel converted to regular\n * RGB space\n */\nexport function delinearized(rgbComponent) {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n }\n else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return mathUtils.clampInt(0, 255, Math.round(delinearized * 255.0));\n}\n/**\n * Returns the standard white point; white on a sunny day.\n *\n * @return The white point\n */\nexport function whitePointD65() {\n return WHITE_POINT_D65;\n}\n/**\n * Return RGBA from a given int32 color\n *\n * @param argb ARGB representation of a int32 color.\n * @return RGBA representation of a int32 color.\n */\nexport function rgbaFromArgb(argb) {\n const r = redFromArgb(argb);\n const g = greenFromArgb(argb);\n const b = blueFromArgb(argb);\n const a = alphaFromArgb(argb);\n return { r, g, b, a };\n}\n/**\n * Return int32 color from a given RGBA component\n *\n * @param rgba RGBA representation of a int32 color.\n * @returns ARGB representation of a int32 color.\n */\nexport function argbFromRgba({ r, g, b, a }) {\n const rValue = clampComponent(r);\n const gValue = clampComponent(g);\n const bValue = clampComponent(b);\n const aValue = clampComponent(a);\n return (aValue << 24) | (rValue << 16) | (gValue << 8) | bValue;\n}\nfunction clampComponent(value) {\n if (value < 0)\n return 0;\n if (value > 255)\n return 255;\n return value;\n}\nfunction labF(t) {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n if (t > e) {\n return Math.pow(t, 1.0 / 3.0);\n }\n else {\n return (kappa * t + 16) / 116;\n }\n}\nfunction labInvf(ft) {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n const ft3 = ft * ft * ft;\n if (ft3 > e) {\n return ft3;\n }\n else {\n return (116 * ft - 16) / kappa;\n }\n}\n//# sourceMappingURL=color_utils.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n/**\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n *\n * This class caches intermediate values of the CAM16 conversion process that\n * depend only on viewing conditions, enabling speed ups.\n */\nexport class ViewingConditions {\n /**\n * Create ViewingConditions from a simple, physically relevant, set of\n * parameters.\n *\n * @param whitePoint White point, measured in the XYZ color space.\n * default = D65, or sunny day afternoon\n * @param adaptingLuminance The luminance of the adapting field. Informally,\n * how bright it is in the room where the color is viewed. Can be\n * calculated from lux by multiplying lux by 0.0586. default = 11.72,\n * or 200 lux.\n * @param backgroundLstar The lightness of the area surrounding the color.\n * measured by L* in L*a*b*. default = 50.0\n * @param surround A general description of the lighting surrounding the\n * color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a\n * dimly light room, like watching TV at home at night. 2.0 means there\n * is no difference between the lighting on the color and around it.\n * default = 2.0\n * @param discountingIlluminant Whether the eye accounts for the tint of the\n * ambient lighting, such as knowing an apple is still red in green light.\n * default = false, the eye does not perform this process on\n * self-luminous objects like displays.\n */\n static make(whitePoint = utils.whitePointD65(), adaptingLuminance = (200.0 / Math.PI) * utils.yFromLstar(50.0) / 100.0, backgroundLstar = 50.0, surround = 2.0, discountingIlluminant = false) {\n const xyz = whitePoint;\n const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;\n const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;\n const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;\n const f = 0.8 + surround / 10.0;\n const c = f >= 0.9 ? math.lerp(0.59, 0.69, (f - 0.9) * 10.0) :\n math.lerp(0.525, 0.59, (f - 0.8) * 10.0);\n let d = discountingIlluminant ?\n 1.0 :\n f * (1.0 - (1.0 / 3.6) * Math.exp((-adaptingLuminance - 42.0) / 92.0));\n d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;\n const nc = f;\n const rgbD = [\n d * (100.0 / rW) + 1.0 - d,\n d * (100.0 / gW) + 1.0 - d,\n d * (100.0 / bW) + 1.0 - d,\n ];\n const k = 1.0 / (5.0 * adaptingLuminance + 1.0);\n const k4 = k * k * k * k;\n const k4F = 1.0 - k4;\n const fl = k4 * adaptingLuminance +\n 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);\n const n = utils.yFromLstar(backgroundLstar) / whitePoint[1];\n const z = 1.48 + Math.sqrt(n);\n const nbb = 0.725 / Math.pow(n, 0.2);\n const ncb = nbb;\n const rgbAFactors = [\n Math.pow((fl * rgbD[0] * rW) / 100.0, 0.42),\n Math.pow((fl * rgbD[1] * gW) / 100.0, 0.42),\n Math.pow((fl * rgbD[2] * bW) / 100.0, 0.42),\n ];\n const rgbA = [\n (400.0 * rgbAFactors[0]) / (rgbAFactors[0] + 27.13),\n (400.0 * rgbAFactors[1]) / (rgbAFactors[1] + 27.13),\n (400.0 * rgbAFactors[2]) / (rgbAFactors[2] + 27.13),\n ];\n const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;\n return new ViewingConditions(n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);\n }\n /**\n * Parameters are intermediate values of the CAM16 conversion process. Their\n * names are shorthand for technical color science terminology, this class\n * would not benefit from documenting them individually. A brief overview\n * is available in the CAM16 specification, and a complete overview requires\n * a color science textbook, such as Fairchild's Color Appearance Models.\n */\n constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {\n this.n = n;\n this.aw = aw;\n this.nbb = nbb;\n this.ncb = ncb;\n this.c = c;\n this.nc = nc;\n this.rgbD = rgbD;\n this.fl = fl;\n this.fLRoot = fLRoot;\n this.z = z;\n }\n}\n/** sRGB-like viewing conditions. */\nViewingConditions.DEFAULT = ViewingConditions.make();\n//# sourceMappingURL=viewing_conditions.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\nimport { ViewingConditions } from './viewing_conditions.js';\n/**\n * CAM16, a color appearance model. Colors are not just defined by their hex\n * code, but rather, a hex code and viewing conditions.\n *\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*, a*,\n * b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and should be used when measuring distances between colors.\n *\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n */\nexport class Cam16 {\n /**\n * All of the CAM16 dimensions can be calculated from 3 of the dimensions, in\n * the following combinations:\n * - {j or q} and {c, m, or s} and hue\n * - jstar, astar, bstar\n * Prefer using a static method that constructs from 3 of those dimensions.\n * This constructor is intended for those methods to use to return all\n * possible dimensions.\n *\n * @param hue\n * @param chroma informally, colorfulness / color intensity. like saturation\n * in HSL, except perceptually accurate.\n * @param j lightness\n * @param q brightness; ratio of lightness to white point's lightness\n * @param m colorfulness\n * @param s saturation; ratio of chroma to white point's chroma\n * @param jstar CAM16-UCS J coordinate\n * @param astar CAM16-UCS a coordinate\n * @param bstar CAM16-UCS b coordinate\n */\n constructor(hue, chroma, j, q, m, s, jstar, astar, bstar) {\n this.hue = hue;\n this.chroma = chroma;\n this.j = j;\n this.q = q;\n this.m = m;\n this.s = s;\n this.jstar = jstar;\n this.astar = astar;\n this.bstar = bstar;\n }\n /**\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*,\n * a*, b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and is used to measure distances between colors.\n */\n distance(other) {\n const dJ = this.jstar - other.jstar;\n const dA = this.astar - other.astar;\n const dB = this.bstar - other.bstar;\n const dEPrime = Math.sqrt(dJ * dJ + dA * dA + dB * dB);\n const dE = 1.41 * Math.pow(dEPrime, 0.63);\n return dE;\n }\n /**\n * @param argb ARGB representation of a color.\n * @return CAM16 color, assuming the color was viewed in default viewing\n * conditions.\n */\n static fromInt(argb) {\n return Cam16.fromIntInViewingConditions(argb, ViewingConditions.DEFAULT);\n }\n /**\n * @param argb ARGB representation of a color.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n * @return CAM16 color.\n */\n static fromIntInViewingConditions(argb, viewingConditions) {\n const red = (argb & 0x00ff0000) >> 16;\n const green = (argb & 0x0000ff00) >> 8;\n const blue = (argb & 0x000000ff);\n const redL = utils.linearized(red);\n const greenL = utils.linearized(green);\n const blueL = utils.linearized(blue);\n const x = 0.41233895 * redL + 0.35762064 * greenL + 0.18051042 * blueL;\n const y = 0.2126 * redL + 0.7152 * greenL + 0.0722 * blueL;\n const z = 0.01932141 * redL + 0.11916382 * greenL + 0.95034478 * blueL;\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n const rAF = Math.pow((viewingConditions.fl * Math.abs(rD)) / 100.0, 0.42);\n const gAF = Math.pow((viewingConditions.fl * Math.abs(gD)) / 100.0, 0.42);\n const bAF = Math.pow((viewingConditions.fl * Math.abs(bD)) / 100.0, 0.42);\n const rA = (math.signum(rD) * 400.0 * rAF) / (rAF + 27.13);\n const gA = (math.signum(gD) * 400.0 * gAF) / (gAF + 27.13);\n const bA = (math.signum(bD) * 400.0 * bAF) / (bAF + 27.13);\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n const b = (rA + gA - 2.0 * bA) / 9.0;\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n const atan2 = Math.atan2(b, a);\n const atanDegrees = (atan2 * 180.0) / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360.0 :\n atanDegrees;\n const hueRadians = (hue * Math.PI) / 180.0;\n const ac = p2 * viewingConditions.nbb;\n const j = 100.0 *\n Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z);\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const huePrime = hue < 20.14 ? hue + 360 : hue;\n const eHue = 0.25 * (Math.cos((huePrime * Math.PI) / 180.0 + 2.0) + 3.8);\n const p1 = (50000.0 / 13.0) * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = (p1 * Math.sqrt(a * a + b * b)) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const c = alpha * Math.sqrt(j / 100.0);\n const m = c * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, c, j, q, m, s, jstar, astar, bstar);\n }\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n */\n static fromJch(j, c, h) {\n return Cam16.fromJchInViewingConditions(j, c, h, ViewingConditions.DEFAULT);\n }\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromJchInViewingConditions(j, c, h, viewingConditions) {\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const m = c * viewingConditions.fLRoot;\n const alpha = c / Math.sqrt(j / 100.0);\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const hueRadians = (h * Math.PI) / 180.0;\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(h, c, j, q, m, s, jstar, astar, bstar);\n }\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n */\n static fromUcs(jstar, astar, bstar) {\n return Cam16.fromUcsInViewingConditions(jstar, astar, bstar, ViewingConditions.DEFAULT);\n }\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromUcsInViewingConditions(jstar, astar, bstar, viewingConditions) {\n const a = astar;\n const b = bstar;\n const m = Math.sqrt(a * a + b * b);\n const M = (Math.exp(m * 0.0228) - 1.0) / 0.0228;\n const c = M / viewingConditions.fLRoot;\n let h = Math.atan2(b, a) * (180.0 / Math.PI);\n if (h < 0.0) {\n h += 360.0;\n }\n const j = jstar / (1 - (jstar - 100) * 0.007);\n return Cam16.fromJchInViewingConditions(j, c, h, viewingConditions);\n }\n /**\n * @return ARGB representation of color, assuming the color was viewed in\n * default viewing conditions, which are near-identical to the default\n * viewing conditions for sRGB.\n */\n toInt() {\n return this.viewed(ViewingConditions.DEFAULT);\n }\n /**\n * @param viewingConditions Information about the environment where the color\n * will be viewed.\n * @return ARGB representation of color\n */\n viewed(viewingConditions) {\n const alpha = this.chroma === 0.0 || this.j === 0.0 ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n const t = Math.pow(alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73), 1.0 / 0.9);\n const hRad = (this.hue * Math.PI) / 180.0;\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 = eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const p2 = ac / viewingConditions.nbb;\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n const gamma = (23.0 * (p2 + 0.305) * t) /\n (23.0 * p1 + 11.0 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n const argb = utils.argbFromXyz(x, y, z);\n return argb;\n }\n /// Given color expressed in XYZ and viewed in [viewingConditions], convert to\n /// CAM16.\n static fromXyzInViewingConditions(x, y, z, viewingConditions) {\n // Transform XYZ to 'cone'/'rgb' responses\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n // Discount illuminant\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n // chromatic adaptation\n const rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100.0, 0.42);\n const gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100.0, 0.42);\n const bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100.0, 0.42);\n const rA = math.signum(rD) * 400.0 * rAF / (rAF + 27.13);\n const gA = math.signum(gD) * 400.0 * gAF / (gAF + 27.13);\n const bA = math.signum(bD) * 400.0 * bAF / (bAF + 27.13);\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n // auxiliary components\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n // hue\n const atan2 = Math.atan2(b, a);\n const atanDegrees = atan2 * 180.0 / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360 :\n atanDegrees;\n const hueRadians = hue * Math.PI / 180.0;\n // achromatic response to color\n const ac = p2 * viewingConditions.nbb;\n // CAM16 lightness and brightness\n const J = 100.0 *\n Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z);\n const Q = (4.0 / viewingConditions.c) * Math.sqrt(J / 100.0) *\n (viewingConditions.aw + 4.0) * (viewingConditions.fLRoot);\n const huePrime = (hue < 20.14) ? hue + 360 : hue;\n const eHue = (1.0 / 4.0) * (Math.cos(huePrime * Math.PI / 180.0 + 2.0) + 3.8);\n const p1 = 50000.0 / 13.0 * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = p1 * Math.sqrt(a * a + b * b) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n // CAM16 chroma, colorfulness, chroma\n const C = alpha * Math.sqrt(J / 100.0);\n const M = C * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n // CAM16-UCS components\n const jstar = (1.0 + 100.0 * 0.007) * J / (1.0 + 0.007 * J);\n const mstar = Math.log(1.0 + 0.0228 * M) / 0.0228;\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, C, J, Q, M, s, jstar, astar, bstar);\n }\n /// XYZ representation of CAM16 seen in [viewingConditions].\n xyzInViewingConditions(viewingConditions) {\n const alpha = (this.chroma === 0.0 || this.j === 0.0) ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n const t = Math.pow(alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73), 1.0 / 0.9);\n const hRad = this.hue * Math.PI / 180.0;\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 = eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const p2 = (ac / viewingConditions.nbb);\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n return [x, y, z];\n }\n}\n//# sourceMappingURL=cam16.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\nimport { Cam16 } from './cam16.js';\nimport { ViewingConditions } from './viewing_conditions.js';\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * A class that solves the HCT equation.\n */\nexport class HctSolver {\n /**\n * Sanitizes a small enough angle in radians.\n *\n * @param angle An angle in radians; must not deviate too much\n * from 0.\n * @return A coterminal angle between 0 and 2pi.\n */\n static sanitizeRadians(angle) {\n return (angle + Math.PI * 8) % (Math.PI * 2);\n }\n /**\n * Delinearizes an RGB component, returning a floating-point\n * number.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0.0 <= output <= 255.0, color channel converted to\n * regular RGB space\n */\n static trueDelinearized(rgbComponent) {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n }\n else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return delinearized * 255.0;\n }\n static chromaticAdaptation(component) {\n const af = Math.pow(Math.abs(component), 0.42);\n return mathUtils.signum(component) * 400.0 * af / (af + 27.13);\n }\n /**\n * Returns the hue of a linear RGB color in CAM16.\n *\n * @param linrgb The linear RGB coordinates of a color.\n * @return The hue of the color in CAM16, in radians.\n */\n static hueOf(linrgb) {\n const scaledDiscount = mathUtils.matrixMultiply(linrgb, HctSolver.SCALED_DISCOUNT_FROM_LINRGB);\n const rA = HctSolver.chromaticAdaptation(scaledDiscount[0]);\n const gA = HctSolver.chromaticAdaptation(scaledDiscount[1]);\n const bA = HctSolver.chromaticAdaptation(scaledDiscount[2]);\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n return Math.atan2(b, a);\n }\n static areInCyclicOrder(a, b, c) {\n const deltaAB = HctSolver.sanitizeRadians(b - a);\n const deltaAC = HctSolver.sanitizeRadians(c - a);\n return deltaAB < deltaAC;\n }\n /**\n * Solves the lerp equation.\n *\n * @param source The starting number.\n * @param mid The number in the middle.\n * @param target The ending number.\n * @return A number t such that lerp(source, target, t) = mid.\n */\n static intercept(source, mid, target) {\n return (mid - source) / (target - source);\n }\n static lerpPoint(source, t, target) {\n return [\n source[0] + (target[0] - source[0]) * t,\n source[1] + (target[1] - source[1]) * t,\n source[2] + (target[2] - source[2]) * t,\n ];\n }\n /**\n * Intersects a segment with a plane.\n *\n * @param source The coordinates of point A.\n * @param coordinate The R-, G-, or B-coordinate of the plane.\n * @param target The coordinates of point B.\n * @param axis The axis the plane is perpendicular with. (0: R, 1:\n * G, 2: B)\n * @return The intersection point of the segment AB with the plane\n * R=coordinate, G=coordinate, or B=coordinate\n */\n static setCoordinate(source, coordinate, target, axis) {\n const t = HctSolver.intercept(source[axis], coordinate, target[axis]);\n return HctSolver.lerpPoint(source, t, target);\n }\n static isBounded(x) {\n return 0.0 <= x && x <= 100.0;\n }\n /**\n * Returns the nth possible vertex of the polygonal intersection.\n *\n * @param y The Y value of the plane.\n * @param n The zero-based index of the point. 0 <= n <= 11.\n * @return The nth possible vertex of the polygonal intersection\n * of the y plane and the RGB cube, in linear RGB coordinates, if\n * it exists. If this possible vertex lies outside of the cube,\n * [-1.0, -1.0, -1.0] is returned.\n */\n static nthVertex(y, n) {\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const coordA = n % 4 <= 1 ? 0.0 : 100.0;\n const coordB = n % 2 === 0 ? 0.0 : 100.0;\n if (n < 4) {\n const g = coordA;\n const b = coordB;\n const r = (y - g * kG - b * kB) / kR;\n if (HctSolver.isBounded(r)) {\n return [r, g, b];\n }\n else {\n return [-1.0, -1.0, -1.0];\n }\n }\n else if (n < 8) {\n const b = coordA;\n const r = coordB;\n const g = (y - r * kR - b * kB) / kG;\n if (HctSolver.isBounded(g)) {\n return [r, g, b];\n }\n else {\n return [-1.0, -1.0, -1.0];\n }\n }\n else {\n const r = coordA;\n const g = coordB;\n const b = (y - r * kR - g * kG) / kB;\n if (HctSolver.isBounded(b)) {\n return [r, g, b];\n }\n else {\n return [-1.0, -1.0, -1.0];\n }\n }\n }\n /**\n * Finds the segment containing the desired color.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return A list of two sets of linear RGB coordinates, each\n * corresponding to an endpoint of the segment containing the\n * desired color.\n */\n static bisectToSegment(y, targetHue) {\n let left = [-1.0, -1.0, -1.0];\n let right = left;\n let leftHue = 0.0;\n let rightHue = 0.0;\n let initialized = false;\n let uncut = true;\n for (let n = 0; n < 12; n++) {\n const mid = HctSolver.nthVertex(y, n);\n if (mid[0] < 0) {\n continue;\n }\n const midHue = HctSolver.hueOf(mid);\n if (!initialized) {\n left = mid;\n right = mid;\n leftHue = midHue;\n rightHue = midHue;\n initialized = true;\n continue;\n }\n if (uncut || HctSolver.areInCyclicOrder(leftHue, midHue, rightHue)) {\n uncut = false;\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rightHue = midHue;\n }\n else {\n left = mid;\n leftHue = midHue;\n }\n }\n }\n return [left, right];\n }\n static midpoint(a, b) {\n return [\n (a[0] + b[0]) / 2,\n (a[1] + b[1]) / 2,\n (a[2] + b[2]) / 2,\n ];\n }\n static criticalPlaneBelow(x) {\n return Math.floor(x - 0.5);\n }\n static criticalPlaneAbove(x) {\n return Math.ceil(x - 0.5);\n }\n /**\n * Finds a color with the given Y and hue on the boundary of the\n * cube.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return The desired color, in linear RGB coordinates.\n */\n static bisectToLimit(y, targetHue) {\n const segment = HctSolver.bisectToSegment(y, targetHue);\n let left = segment[0];\n let leftHue = HctSolver.hueOf(left);\n let right = segment[1];\n for (let axis = 0; axis < 3; axis++) {\n if (left[axis] !== right[axis]) {\n let lPlane = -1;\n let rPlane = 255;\n if (left[axis] < right[axis]) {\n lPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(right[axis]));\n }\n else {\n lPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(right[axis]));\n }\n for (let i = 0; i < 8; i++) {\n if (Math.abs(rPlane - lPlane) <= 1) {\n break;\n }\n else {\n const mPlane = Math.floor((lPlane + rPlane) / 2.0);\n const midPlaneCoordinate = HctSolver.CRITICAL_PLANES[mPlane];\n const mid = HctSolver.setCoordinate(left, midPlaneCoordinate, right, axis);\n const midHue = HctSolver.hueOf(mid);\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rPlane = mPlane;\n }\n else {\n left = mid;\n leftHue = midHue;\n lPlane = mPlane;\n }\n }\n }\n }\n }\n return HctSolver.midpoint(left, right);\n }\n static inverseChromaticAdaptation(adapted) {\n const adaptedAbs = Math.abs(adapted);\n const base = Math.max(0, 27.13 * adaptedAbs / (400.0 - adaptedAbs));\n return mathUtils.signum(adapted) * Math.pow(base, 1.0 / 0.42);\n }\n /**\n * Finds a color with the given hue, chroma, and Y.\n *\n * @param hueRadians The desired hue in radians.\n * @param chroma The desired chroma.\n * @param y The desired Y.\n * @return The desired color as a hexadecimal integer, if found; 0\n * otherwise.\n */\n static findResultByJ(hueRadians, chroma, y) {\n // Initial estimate of j.\n let j = Math.sqrt(y) * 11.0;\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const viewingConditions = ViewingConditions.DEFAULT;\n const tInnerCoeff = 1 / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const eHue = 0.25 * (Math.cos(hueRadians + 2.0) + 3.8);\n const p1 = eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const hSin = Math.sin(hueRadians);\n const hCos = Math.cos(hueRadians);\n for (let iterationRound = 0; iterationRound < 5; iterationRound++) {\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const jNormalized = j / 100.0;\n const alpha = chroma === 0.0 || j === 0.0 ? 0.0 : chroma / Math.sqrt(jNormalized);\n const t = Math.pow(alpha * tInnerCoeff, 1.0 / 0.9);\n const ac = viewingConditions.aw *\n Math.pow(jNormalized, 1.0 / viewingConditions.c / viewingConditions.z);\n const p2 = ac / viewingConditions.nbb;\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCScaled = HctSolver.inverseChromaticAdaptation(rA);\n const gCScaled = HctSolver.inverseChromaticAdaptation(gA);\n const bCScaled = HctSolver.inverseChromaticAdaptation(bA);\n const linrgb = mathUtils.matrixMultiply([rCScaled, gCScaled, bCScaled], HctSolver.LINRGB_FROM_SCALED_DISCOUNT);\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n if (linrgb[0] < 0 || linrgb[1] < 0 || linrgb[2] < 0) {\n return 0;\n }\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const fnj = kR * linrgb[0] + kG * linrgb[1] + kB * linrgb[2];\n if (fnj <= 0) {\n return 0;\n }\n if (iterationRound === 4 || Math.abs(fnj - y) < 0.002) {\n if (linrgb[0] > 100.01 || linrgb[1] > 100.01 || linrgb[2] > 100.01) {\n return 0;\n }\n return colorUtils.argbFromLinrgb(linrgb);\n }\n // Iterates with Newton method,\n // Using 2 * fn(j) / j as the approximation of fn'(j)\n j = j - (fnj - y) * j / (2 * fnj);\n }\n return 0;\n }\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return A hexadecimal representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToInt(hueDegrees, chroma, lstar) {\n if (chroma < 0.0001 || lstar < 0.0001 || lstar > 99.9999) {\n return colorUtils.argbFromLstar(lstar);\n }\n hueDegrees = mathUtils.sanitizeDegreesDouble(hueDegrees);\n const hueRadians = hueDegrees / 180 * Math.PI;\n const y = colorUtils.yFromLstar(lstar);\n const exactAnswer = HctSolver.findResultByJ(hueRadians, chroma, y);\n if (exactAnswer !== 0) {\n return exactAnswer;\n }\n const linrgb = HctSolver.bisectToLimit(y, hueRadians);\n return colorUtils.argbFromLinrgb(linrgb);\n }\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return An CAM16 object representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToCam(hueDegrees, chroma, lstar) {\n return Cam16.fromInt(HctSolver.solveToInt(hueDegrees, chroma, lstar));\n }\n}\nHctSolver.SCALED_DISCOUNT_FROM_LINRGB = [\n [\n 0.001200833568784504,\n 0.002389694492170889,\n 0.0002795742885861124,\n ],\n [\n 0.0005891086651375999,\n 0.0029785502573438758,\n 0.0003270666104008398,\n ],\n [\n 0.00010146692491640572,\n 0.0005364214359186694,\n 0.0032979401770712076,\n ],\n];\nHctSolver.LINRGB_FROM_SCALED_DISCOUNT = [\n [\n 1373.2198709594231,\n -1100.4251190754821,\n -7.278681089101213,\n ],\n [\n -271.815969077903,\n 559.6580465940733,\n -32.46047482791194,\n ],\n [\n 1.9622899599665666,\n -57.173814538844006,\n 308.7233197812385,\n ],\n];\nHctSolver.Y_FROM_LINRGB = [0.2126, 0.7152, 0.0722];\nHctSolver.CRITICAL_PLANES = [\n 0.015176349177441876, 0.045529047532325624, 0.07588174588720938,\n 0.10623444424209313, 0.13658714259697685, 0.16693984095186062,\n 0.19729253930674434, 0.2276452376616281, 0.2579979360165119,\n 0.28835063437139563, 0.3188300904430532, 0.350925934958123,\n 0.3848314933096426, 0.42057480301049466, 0.458183274052838,\n 0.4976837250274023, 0.5391024159806381, 0.5824650784040898,\n 0.6277969426914107, 0.6751227633498623, 0.7244668422128921,\n 0.775853049866786, 0.829304845476233, 0.8848452951698498,\n 0.942497089126609, 1.0022825574869039, 1.0642236851973577,\n 1.1283421258858297, 1.1946592148522128, 1.2631959812511864,\n 1.3339731595349034, 1.407011200216447, 1.4823302800086415,\n 1.5599503113873272, 1.6398909516233677, 1.7221716113234105,\n 1.8068114625156377, 1.8938294463134073, 1.9832442801866852,\n 2.075074464868551, 2.1693382909216234, 2.2660538449872063,\n 2.36523901573795, 2.4669114995532007, 2.5710888059345764,\n 2.6777882626779785, 2.7870270208169257, 2.898822059350997,\n 3.0131901897720907, 3.1301480604002863, 3.2497121605402226,\n 3.3718988244681087, 3.4967242352587946, 3.624204428461639,\n 3.754355295633311, 3.887192587735158, 4.022731918402185,\n 4.160988767090289, 4.301978482107941, 4.445716283538092,\n 4.592217266055746, 4.741496401646282, 4.893568542229298,\n 5.048448422192488, 5.20615066083972, 5.3666897647573375,\n 5.5300801301023865, 5.696336044816294, 5.865471690767354,\n 6.037501145825082, 6.212438385869475, 6.390297286737924,\n 6.571091626112461, 6.7548350853498045, 6.941541251256611,\n 7.131223617812143, 7.323895587840543, 7.5195704746346665,\n 7.7182615035334345, 7.919981813454504, 8.124744458384042,\n 8.332562408825165, 8.543448553206703, 8.757415699253682,\n 8.974476575321063, 9.194643831691977, 9.417930041841839,\n 9.644347703669503, 9.873909240696694, 10.106627003236781,\n 10.342513269534024, 10.58158024687427, 10.8238400726681,\n 11.069304815507364, 11.317986476196008, 11.569896988756009,\n 11.825048221409341, 12.083451977536606, 12.345119996613247,\n 12.610063955123938, 12.878295467455942, 13.149826086772048,\n 13.42466730586372, 13.702830557985108, 13.984327217668513,\n 14.269168601521828, 14.55736596900856, 14.848930523210871,\n 15.143873411576273, 15.44220572664832, 15.743938506781891,\n 16.04908273684337, 16.35764934889634, 16.66964922287304,\n 16.985093187232053, 17.30399201960269, 17.62635644741625,\n 17.95219714852476, 18.281524751807332, 18.614349837764564,\n 18.95068293910138, 19.290534541298456, 19.633915083172692,\n 19.98083495742689, 20.331304511189067, 20.685334046541502,\n 21.042933821039977, 21.404114048223256, 21.76888489811322,\n 22.137256497705877, 22.50923893145328, 22.884842241736916,\n 23.264076429332462, 23.6469514538663, 24.033477234264016,\n 24.42366364919083, 24.817520537484558, 25.21505769858089,\n 25.61628489293138, 26.021211842414342, 26.429848230738664,\n 26.842203703840827, 27.258287870275353, 27.678110301598522,\n 28.10168053274597, 28.529008062403893, 28.96010235337422,\n 29.39497283293396, 29.83362889318845, 30.276079891419332,\n 30.722335150426627, 31.172403958865512, 31.62629557157785,\n 32.08401920991837, 32.54558406207592, 33.010999283389665,\n 33.4802739966603, 33.953417292456834, 34.430438229418264,\n 34.911345834551085, 35.39614910352207, 35.88485700094671,\n 36.37747846067349, 36.87402238606382, 37.37449765026789,\n 37.87891309649659, 38.38727753828926, 38.89959975977785,\n 39.41588851594697, 39.93615253289054, 40.460400508064545,\n 40.98864111053629, 41.520882981230194, 42.05713473317016,\n 42.597404951718396, 43.141702194811224, 43.6900349931913,\n 44.24241185063697, 44.798841244188324, 45.35933162437017,\n 45.92389141541209, 46.49252901546552, 47.065252796817916,\n 47.64207110610409, 48.22299226451468, 48.808024568002054,\n 49.3971762874833, 49.9904556690408, 50.587870934119984,\n 51.189430279724725, 51.79514187861014, 52.40501387947288,\n 53.0190544071392, 53.637271562750364, 54.259673423945976,\n 54.88626804504493, 55.517063457223934, 56.15206766869424,\n 56.79128866487574, 57.43473440856916, 58.08241284012621,\n 58.734331877617365, 59.39049941699807, 60.05092333227251,\n 60.715611475655585, 61.38457167773311, 62.057811747619894,\n 62.7353394731159, 63.417162620860914, 64.10328893648692,\n 64.79372614476921, 65.48848194977529, 66.18756403501224,\n 66.89098006357258, 67.59873767827808, 68.31084450182222,\n 69.02730813691093, 69.74813616640164, 70.47333615344107,\n 71.20291564160104, 71.93688215501312, 72.67524319850172,\n 73.41800625771542, 74.16517879925733, 74.9167682708136,\n 75.67278210128072, 76.43322770089146, 77.1981124613393,\n 77.96744375590167, 78.74122893956174, 79.51947534912904,\n 80.30219030335869, 81.08938110306934, 81.88105503125999,\n 82.67721935322541, 83.4778813166706, 84.28304815182372,\n 85.09272707154808, 85.90692527145302, 86.72564993000343,\n 87.54890820862819, 88.3767072518277, 89.2090541872801,\n 90.04595612594655, 90.88742016217518, 91.73345337380438,\n 92.58406282226491, 93.43925555268066, 94.29903859396902,\n 95.16341895893969, 96.03240364439274, 96.9059996312159,\n 97.78421388448044, 98.6670533535366, 99.55452497210776,\n];\n//# sourceMappingURL=hct_solver.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A color system built using CAM16 hue and chroma, and L* from\n * L*a*b*.\n *\n * Using L* creates a link between the color system, contrast, and thus\n * accessibility. Contrast ratio depends on relative luminance, or Y in the XYZ\n * color space. L*, or perceptual luminance can be calculated from Y.\n *\n * Unlike Y, L* is linear to human perception, allowing trivial creation of\n * accurate color tones.\n *\n * Unlike contrast ratio, measuring contrast in L* is linear, and simple to\n * calculate. A difference of 40 in HCT tone guarantees a contrast ratio >= 3.0,\n * and a difference of 50 guarantees a contrast ratio >= 4.5.\n */\nimport * as utils from '../utils/color_utils.js';\nimport { Cam16 } from './cam16.js';\nimport { HctSolver } from './hct_solver.js';\nimport { ViewingConditions } from './viewing_conditions.js';\n/**\n * HCT, hue, chroma, and tone. A color system that provides a perceptually\n * accurate color measurement system that can also accurately render what colors\n * will appear as in different lighting environments.\n */\nexport class Hct {\n static from(hue, chroma, tone) {\n return new Hct(HctSolver.solveToInt(hue, chroma, tone));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return HCT representation of a color in default viewing conditions\n */\n static fromInt(argb) {\n return new Hct(argb);\n }\n toInt() {\n return this.argb;\n }\n /**\n * A number, in degrees, representing ex. red, orange, yellow, etc.\n * Ranges from 0 <= hue < 360.\n */\n get hue() {\n return this.internalHue;\n }\n /**\n * @param newHue 0 <= newHue < 360; invalid values are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set hue(newHue) {\n this.setInternalState(HctSolver.solveToInt(newHue, this.internalChroma, this.internalTone));\n }\n get chroma() {\n return this.internalChroma;\n }\n /**\n * @param newChroma 0 <= newChroma < ?\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set chroma(newChroma) {\n this.setInternalState(HctSolver.solveToInt(this.internalHue, newChroma, this.internalTone));\n }\n /** Lightness. Ranges from 0 to 100. */\n get tone() {\n return this.internalTone;\n }\n /**\n * @param newTone 0 <= newTone <= 100; invalid valids are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set tone(newTone) {\n this.setInternalState(HctSolver.solveToInt(this.internalHue, this.internalChroma, newTone));\n }\n constructor(argb) {\n this.argb = argb;\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n setInternalState(argb) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n /**\n * Translates a color into different [ViewingConditions].\n *\n * Colors change appearance. They look different with lights on versus off,\n * the same color, as in hex code, on white looks different when on black.\n * This is called color relativity, most famously explicated by Josef Albers\n * in Interaction of Color.\n *\n * In color science, color appearance models can account for this and\n * calculate the appearance of a color in different settings. HCT is based on\n * CAM16, a color appearance model, and uses it to make these calculations.\n *\n * See [ViewingConditions.make] for parameters affecting color appearance.\n */\n inViewingConditions(vc) {\n // 1. Use CAM16 to find XYZ coordinates of color in specified VC.\n const cam = Cam16.fromInt(this.toInt());\n const viewedInVc = cam.xyzInViewingConditions(vc);\n // 2. Create CAM16 of those XYZ coordinates in default VC.\n const recastInVc = Cam16.fromXyzInViewingConditions(viewedInVc[0], viewedInVc[1], viewedInVc[2], ViewingConditions.make());\n // 3. Create HCT from:\n // - CAM16 using default VC with XYZ coordinates in specified VC.\n // - L* converted from Y in XYZ coordinates in specified VC.\n const recastHct = Hct.from(recastInVc.hue, recastInVc.chroma, utils.lstarFromY(viewedInVc[1]));\n return recastHct;\n }\n}\n//# sourceMappingURL=hct.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport { Cam16 } from '../hct/cam16.js';\nimport { Hct } from '../hct/hct.js';\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * Functions for blending in HCT and CAM16.\n */\nexport class Blend {\n /**\n * Blend the design color's HCT hue towards the key color's HCT\n * hue, in a way that leaves the original color recognizable and\n * recognizably shifted towards the key color.\n *\n * @param designColor ARGB representation of an arbitrary color.\n * @param sourceColor ARGB representation of the main theme color.\n * @return The design color with a hue shifted towards the\n * system's color, a slightly warmer/cooler variant of the design\n * color's hue.\n */\n static harmonize(designColor, sourceColor) {\n const fromHct = Hct.fromInt(designColor);\n const toHct = Hct.fromInt(sourceColor);\n const differenceDegrees = mathUtils.differenceDegrees(fromHct.hue, toHct.hue);\n const rotationDegrees = Math.min(differenceDegrees * 0.5, 15.0);\n const outputHue = mathUtils.sanitizeDegreesDouble(fromHct.hue +\n rotationDegrees * mathUtils.rotationDirection(fromHct.hue, toHct.hue));\n return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();\n }\n /**\n * Blends hue from one color into another. The chroma and tone of\n * the original color are maintained.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, with a hue blended towards to. Chroma and tone\n * are constant.\n */\n static hctHue(from, to, amount) {\n const ucs = Blend.cam16Ucs(from, to, amount);\n const ucsCam = Cam16.fromInt(ucs);\n const fromCam = Cam16.fromInt(from);\n const blended = Hct.from(ucsCam.hue, fromCam.chroma, colorUtils.lstarFromArgb(from));\n return blended.toInt();\n }\n /**\n * Blend in CAM16-UCS space.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, blended towards to. Hue, chroma, and tone will\n * change.\n */\n static cam16Ucs(from, to, amount) {\n const fromCam = Cam16.fromInt(from);\n const toCam = Cam16.fromInt(to);\n const fromJ = fromCam.jstar;\n const fromA = fromCam.astar;\n const fromB = fromCam.bstar;\n const toJ = toCam.jstar;\n const toA = toCam.astar;\n const toB = toCam.bstar;\n const jstar = fromJ + (toJ - fromJ) * amount;\n const astar = fromA + (toA - fromA) * amount;\n const bstar = fromB + (toB - fromB) * amount;\n return Cam16.fromUcs(jstar, astar, bstar).toInt();\n }\n}\n//# sourceMappingURL=blend.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n/**\n * Utility methods for calculating contrast given two colors, or calculating a\n * color given one color and a contrast ratio.\n *\n * Contrast ratio is calculated using XYZ's Y. When linearized to match human\n * perception, Y becomes HCT's tone and L*a*b*'s' L*. Informally, this is the\n * lightness of a color.\n *\n * Methods refer to tone, T in the the HCT color space.\n * Tone is equivalent to L* in the L*a*b* color space, or L in the LCH color\n * space.\n */\nexport class Contrast {\n /**\n * Returns a contrast ratio, which ranges from 1 to 21.\n *\n * @param toneA Tone between 0 and 100. Values outside will be clamped.\n * @param toneB Tone between 0 and 100. Values outside will be clamped.\n */\n static ratioOfTones(toneA, toneB) {\n toneA = math.clampDouble(0.0, 100.0, toneA);\n toneB = math.clampDouble(0.0, 100.0, toneB);\n return Contrast.ratioOfYs(utils.yFromLstar(toneA), utils.yFromLstar(toneB));\n }\n static ratioOfYs(y1, y2) {\n const lighter = y1 > y2 ? y1 : y2;\n const darker = (lighter === y2) ? y1 : y2;\n return (lighter + 5.0) / (darker + 5.0);\n }\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighter(tone, ratio) {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n const darkY = utils.yFromLstar(tone);\n const lightY = ratio * (darkY + 5.0) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(lightY) + 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n /**\n * Returns a tone <= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darker(tone, ratio) {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n const lightY = utils.yFromLstar(tone);\n const darkY = ((lightY + 5.0) / ratio) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(darkY) - 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the ratio with tone. For example, there is no color lighter than T100.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 100 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighterUnsafe(tone, ratio) {\n const lighterSafe = Contrast.lighter(tone, ratio);\n return (lighterSafe < 0.0) ? 100.0 : lighterSafe;\n }\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the [ratio with [tone]. For example, there is no color darker than T0.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 0 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darkerUnsafe(tone, ratio) {\n const darkerSafe = Contrast.darker(tone, ratio);\n return (darkerSafe < 0.0) ? 0.0 : darkerSafe;\n }\n}\n//# sourceMappingURL=contrast.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Hct } from '../hct/hct.js';\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * Check and/or fix universally disliked colors.\n * Color science studies of color preference indicate universal distaste for\n * dark yellow-greens, and also show this is correlated to distate for\n * biological waste and rotting food.\n *\n * See Palmer and Schloss, 2010 or Schloss and Palmer's Chapter 21 in Handbook\n * of Color Psychology (2015).\n */\nexport class DislikeAnalyzer {\n /**\n * Returns true if a color is disliked.\n *\n * @param hct A color to be judged.\n * @return Whether the color is disliked.\n *\n * Disliked is defined as a dark yellow-green that is not neutral.\n */\n static isDisliked(hct) {\n const huePasses = Math.round(hct.hue) >= 90.0 && Math.round(hct.hue) <= 111.0;\n const chromaPasses = Math.round(hct.chroma) > 16.0;\n const tonePasses = Math.round(hct.tone) < 65.0;\n return huePasses && chromaPasses && tonePasses;\n }\n /**\n * If a color is disliked, lighten it to make it likable.\n *\n * @param hct A color to be judged.\n * @return A new color if the original color is disliked, or the original\n * color if it is acceptable.\n */\n static fixIfDisliked(hct) {\n if (DislikeAnalyzer.isDisliked(hct)) {\n return Hct.from(hct.hue, hct.chroma, 70.0);\n }\n return hct;\n }\n}\n//# sourceMappingURL=dislike_analyzer.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Contrast } from '../contrast/contrast.js';\nimport * as math from '../utils/math_utils.js';\n/**\n * A color that adjusts itself based on UI state provided by DynamicScheme.\n *\n * Colors without backgrounds do not change tone when contrast changes. Colors\n * with backgrounds become closer to their background as contrast lowers, and\n * further when contrast increases.\n *\n * Prefer static constructors. They require either a hexcode, a palette and\n * tone, or a hue and chroma. Optionally, they can provide a background\n * DynamicColor.\n */\nexport class DynamicColor {\n /**\n * Create a DynamicColor defined by a TonalPalette and HCT tone.\n *\n * @param args Functions with DynamicScheme as input. Must provide a palette\n * and tone. May provide a background DynamicColor and ToneDeltaConstraint.\n */\n static fromPalette(args) {\n return new DynamicColor(args.name ?? '', args.palette, args.tone, args.isBackground ?? false, args.background, args.secondBackground, args.contrastCurve, args.toneDeltaPair);\n }\n /**\n * The base constructor for DynamicColor.\n *\n * _Strongly_ prefer using one of the convenience constructors. This class is\n * arguably too flexible to ensure it can support any scenario. Functional\n * arguments allow overriding without risks that come with subclasses.\n *\n * For example, the default behavior of adjust tone at max contrast\n * to be at a 7.0 ratio with its background is principled and\n * matches accessibility guidance. That does not mean it's the desired\n * approach for _every_ design system, and every color pairing,\n * always, in every case.\n *\n * @param name The name of the dynamic color. Defaults to empty.\n * @param palette Function that provides a TonalPalette given\n * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this\n * replaces the need to specify hue/chroma. By providing a tonal palette, when\n * contrast adjustments are made, intended chroma can be preserved.\n * @param tone Function that provides a tone, given a DynamicScheme.\n * @param isBackground Whether this dynamic color is a background, with\n * some other color as the foreground. Defaults to false.\n * @param background The background of the dynamic color (as a function of a\n * `DynamicScheme`), if it exists.\n * @param secondBackground A second background of the dynamic color (as a\n * function of a `DynamicScheme`), if it\n * exists.\n * @param contrastCurve A `ContrastCurve` object specifying how its contrast\n * against its background should behave in various contrast levels options.\n * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta\n * constraint between two colors. One of them must be the color being\n * constructed.\n */\n constructor(name, palette, tone, isBackground, background, secondBackground, contrastCurve, toneDeltaPair) {\n this.name = name;\n this.palette = palette;\n this.tone = tone;\n this.isBackground = isBackground;\n this.background = background;\n this.secondBackground = secondBackground;\n this.contrastCurve = contrastCurve;\n this.toneDeltaPair = toneDeltaPair;\n this.hctCache = new Map();\n if ((!background) && secondBackground) {\n throw new Error(`Color ${name} has secondBackground` +\n `defined, but background is not defined.`);\n }\n if ((!background) && contrastCurve) {\n throw new Error(`Color ${name} has contrastCurve` +\n `defined, but background is not defined.`);\n }\n if (background && !contrastCurve) {\n throw new Error(`Color ${name} has background` +\n `defined, but contrastCurve is not defined.`);\n }\n }\n /**\n * Return a ARGB integer (i.e. a hex code).\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getArgb(scheme) {\n return this.getHct(scheme).toInt();\n }\n /**\n * Return a color, expressed in the HCT color space, that this\n * DynamicColor is under the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getHct(scheme) {\n const cachedAnswer = this.hctCache.get(scheme);\n if (cachedAnswer != null) {\n return cachedAnswer;\n }\n const tone = this.getTone(scheme);\n const answer = this.palette(scheme).getHct(tone);\n if (this.hctCache.size > 4) {\n this.hctCache.clear();\n }\n this.hctCache.set(scheme, answer);\n return answer;\n }\n /**\n * Return a tone, T in the HCT color space, that this DynamicColor is under\n * the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getTone(scheme) {\n const decreasingContrast = scheme.contrastLevel < 0;\n // Case 1: dual foreground, pair of colors with delta constraint.\n if (this.toneDeltaPair) {\n const toneDeltaPair = this.toneDeltaPair(scheme);\n const roleA = toneDeltaPair.roleA;\n const roleB = toneDeltaPair.roleB;\n const delta = toneDeltaPair.delta;\n const polarity = toneDeltaPair.polarity;\n const stayTogether = toneDeltaPair.stayTogether;\n const bg = this.background(scheme);\n const bgTone = bg.getTone(scheme);\n const aIsNearer = (polarity === 'nearer' ||\n (polarity === 'lighter' && !scheme.isDark) ||\n (polarity === 'darker' && scheme.isDark));\n const nearer = aIsNearer ? roleA : roleB;\n const farther = aIsNearer ? roleB : roleA;\n const amNearer = this.name === nearer.name;\n const expansionDir = scheme.isDark ? 1 : -1;\n // 1st round: solve to min, each\n const nContrast = nearer.contrastCurve.get(scheme.contrastLevel);\n const fContrast = farther.contrastCurve.get(scheme.contrastLevel);\n // If a color is good enough, it is not adjusted.\n // Initial and adjusted tones for `nearer`\n const nInitialTone = nearer.tone(scheme);\n let nTone = Contrast.ratioOfTones(bgTone, nInitialTone) >= nContrast ?\n nInitialTone :\n DynamicColor.foregroundTone(bgTone, nContrast);\n // Initial and adjusted tones for `farther`\n const fInitialTone = farther.tone(scheme);\n let fTone = Contrast.ratioOfTones(bgTone, fInitialTone) >= fContrast ?\n fInitialTone :\n DynamicColor.foregroundTone(bgTone, fContrast);\n if (decreasingContrast) {\n // If decreasing contrast, adjust color to the \"bare minimum\"\n // that satisfies contrast.\n nTone = DynamicColor.foregroundTone(bgTone, nContrast);\n fTone = DynamicColor.foregroundTone(bgTone, fContrast);\n }\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones satisfy the constraint; no change needed.\n }\n else {\n // 2nd round: expand farther to match delta.\n fTone = math.clampDouble(0, 100, nTone + delta * expansionDir);\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones now satisfy the constraint; no change needed.\n }\n else {\n // 3rd round: contract nearer to match delta.\n nTone = math.clampDouble(0, 100, fTone - delta * expansionDir);\n }\n }\n // Avoids the 50-59 awkward zone.\n if (50 <= nTone && nTone < 60) {\n // If `nearer` is in the awkward zone, move it away, together with\n // `farther`.\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n }\n else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n }\n else if (50 <= fTone && fTone < 60) {\n if (stayTogether) {\n // Fixes both, to avoid two colors on opposite sides of the \"awkward\n // zone\".\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n }\n else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n }\n else {\n // Not required to stay together; fixes just one.\n if (expansionDir > 0) {\n fTone = 60;\n }\n else {\n fTone = 49;\n }\n }\n }\n // Returns `nTone` if this color is `nearer`, otherwise `fTone`.\n return amNearer ? nTone : fTone;\n }\n else {\n // Case 2: No contrast pair; just solve for itself.\n let answer = this.tone(scheme);\n if (this.background == null) {\n return answer; // No adjustment for colors with no background.\n }\n const bgTone = this.background(scheme).getTone(scheme);\n const desiredRatio = this.contrastCurve.get(scheme.contrastLevel);\n if (Contrast.ratioOfTones(bgTone, answer) >= desiredRatio) {\n // Don't \"improve\" what's good enough.\n }\n else {\n // Rough improvement.\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n if (decreasingContrast) {\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n if (this.isBackground && 50 <= answer && answer < 60) {\n // Must adjust\n if (Contrast.ratioOfTones(49, bgTone) >= desiredRatio) {\n answer = 49;\n }\n else {\n answer = 60;\n }\n }\n if (this.secondBackground) {\n // Case 3: Adjust for dual backgrounds.\n const [bg1, bg2] = [this.background, this.secondBackground];\n const [bgTone1, bgTone2] = [bg1(scheme).getTone(scheme), bg2(scheme).getTone(scheme)];\n const [upper, lower] = [Math.max(bgTone1, bgTone2), Math.min(bgTone1, bgTone2)];\n if (Contrast.ratioOfTones(upper, answer) >= desiredRatio &&\n Contrast.ratioOfTones(lower, answer) >= desiredRatio) {\n return answer;\n }\n // The darkest light tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const lightOption = Contrast.lighter(upper, desiredRatio);\n // The lightest dark tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const darkOption = Contrast.darker(lower, desiredRatio);\n // Tones suitable for the foreground.\n const availables = [];\n if (lightOption !== -1)\n availables.push(lightOption);\n if (darkOption !== -1)\n availables.push(darkOption);\n const prefersLight = DynamicColor.tonePrefersLightForeground(bgTone1) ||\n DynamicColor.tonePrefersLightForeground(bgTone2);\n if (prefersLight) {\n return (lightOption < 0) ? 100 : lightOption;\n }\n if (availables.length === 1) {\n return availables[0];\n }\n return (darkOption < 0) ? 0 : darkOption;\n }\n return answer;\n }\n }\n /**\n * Given a background tone, find a foreground tone, while ensuring they reach\n * a contrast ratio that is as close to [ratio] as possible.\n *\n * @param bgTone Tone in HCT. Range is 0 to 100, undefined behavior when it\n * falls outside that range.\n * @param ratio The contrast ratio desired between bgTone and the return\n * value.\n */\n static foregroundTone(bgTone, ratio) {\n const lighterTone = Contrast.lighterUnsafe(bgTone, ratio);\n const darkerTone = Contrast.darkerUnsafe(bgTone, ratio);\n const lighterRatio = Contrast.ratioOfTones(lighterTone, bgTone);\n const darkerRatio = Contrast.ratioOfTones(darkerTone, bgTone);\n const preferLighter = DynamicColor.tonePrefersLightForeground(bgTone);\n if (preferLighter) {\n // This handles an edge case where the initial contrast ratio is high\n // (ex. 13.0), and the ratio passed to the function is that high\n // ratio, and both the lighter and darker ratio fails to pass that\n // ratio.\n //\n // This was observed with Tonal Spot's On Primary Container turning\n // black momentarily between high and max contrast in light mode. PC's\n // standard tone was T90, OPC's was T10, it was light mode, and the\n // contrast value was 0.6568521221032331.\n const negligibleDifference = Math.abs(lighterRatio - darkerRatio) < 0.1 &&\n lighterRatio < ratio && darkerRatio < ratio;\n return lighterRatio >= ratio || lighterRatio >= darkerRatio ||\n negligibleDifference ?\n lighterTone :\n darkerTone;\n }\n else {\n return darkerRatio >= ratio || darkerRatio >= lighterRatio ? darkerTone :\n lighterTone;\n }\n }\n /**\n * Returns whether [tone] prefers a light foreground.\n *\n * People prefer white foregrounds on ~T60-70. Observed over time, and also\n * by Andrew Somers during research for APCA.\n *\n * T60 used as to create the smallest discontinuity possible when skipping\n * down to T49 in order to ensure light foregrounds.\n * Since `tertiaryContainer` in dark monochrome scheme requires a tone of\n * 60, it should not be adjusted. Therefore, 60 is excluded here.\n */\n static tonePrefersLightForeground(tone) {\n return Math.round(tone) < 60.0;\n }\n /**\n * Returns whether [tone] can reach a contrast ratio of 4.5 with a lighter\n * color.\n */\n static toneAllowsLightForeground(tone) {\n return Math.round(tone) <= 49.0;\n }\n /**\n * Adjust a tone such that white has 4.5 contrast, if the tone is\n * reasonably close to supporting it.\n */\n static enableLightForeground(tone) {\n if (DynamicColor.tonePrefersLightForeground(tone) &&\n !DynamicColor.toneAllowsLightForeground(tone)) {\n return 49.0;\n }\n return tone;\n }\n}\n//# sourceMappingURL=dynamic_color.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Hct } from '../hct/hct.js';\n/**\n * A convenience class for retrieving colors that are constant in hue and\n * chroma, but vary in tone.\n */\nexport class TonalPalette {\n /**\n * @param argb ARGB representation of a color\n * @return Tones matching that color's hue and chroma.\n */\n static fromInt(argb) {\n const hct = Hct.fromInt(argb);\n return TonalPalette.fromHct(hct);\n }\n /**\n * @param hct Hct\n * @return Tones matching that color's hue and chroma.\n */\n static fromHct(hct) {\n return new TonalPalette(hct.hue, hct.chroma, hct);\n }\n /**\n * @param hue HCT hue\n * @param chroma HCT chroma\n * @return Tones matching hue and chroma.\n */\n static fromHueAndChroma(hue, chroma) {\n const keyColor = new KeyColor(hue, chroma).create();\n return new TonalPalette(hue, chroma, keyColor);\n }\n constructor(hue, chroma, keyColor) {\n this.hue = hue;\n this.chroma = chroma;\n this.keyColor = keyColor;\n this.cache = new Map();\n }\n /**\n * @param tone HCT tone, measured from 0 to 100.\n * @return ARGB representation of a color with that tone.\n */\n tone(tone) {\n let argb = this.cache.get(tone);\n if (argb === undefined) {\n argb = Hct.from(this.hue, this.chroma, tone).toInt();\n this.cache.set(tone, argb);\n }\n return argb;\n }\n /**\n * @param tone HCT tone.\n * @return HCT representation of a color with that tone.\n */\n getHct(tone) {\n return Hct.fromInt(this.tone(tone));\n }\n}\n/**\n * Key color is a color that represents the hue and chroma of a tonal palette\n */\nclass KeyColor {\n constructor(hue, requestedChroma) {\n this.hue = hue;\n this.requestedChroma = requestedChroma;\n // Cache that maps tone to max chroma to avoid duplicated HCT calculation.\n this.chromaCache = new Map();\n this.maxChromaValue = 200.0;\n }\n /**\n * Creates a key color from a [hue] and a [chroma].\n * The key color is the first tone, starting from T50, matching the given hue\n * and chroma.\n *\n * @return Key color [Hct]\n */\n create() {\n // Pivot around T50 because T50 has the most chroma available, on\n // average. Thus it is most likely to have a direct answer.\n const pivotTone = 50;\n const toneStepSize = 1;\n // Epsilon to accept values slightly higher than the requested chroma.\n const epsilon = 0.01;\n // Binary search to find the tone that can provide a chroma that is closest\n // to the requested chroma.\n let lowerTone = 0;\n let upperTone = 100;\n while (lowerTone < upperTone) {\n const midTone = Math.floor((lowerTone + upperTone) / 2);\n const isAscending = this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);\n const sufficientChroma = this.maxChroma(midTone) >= this.requestedChroma - epsilon;\n if (sufficientChroma) {\n // Either range [lowerTone, midTone] or [midTone, upperTone] has\n // the answer, so search in the range that is closer the pivot tone.\n if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {\n upperTone = midTone;\n }\n else {\n if (lowerTone === midTone) {\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n lowerTone = midTone;\n }\n }\n else {\n // As there is no sufficient chroma in the midTone, follow the direction\n // to the chroma peak.\n if (isAscending) {\n lowerTone = midTone + toneStepSize;\n }\n else {\n // Keep midTone for potential chroma peak.\n upperTone = midTone;\n }\n }\n }\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n // Find the maximum chroma for a given tone\n maxChroma(tone) {\n if (this.chromaCache.has(tone)) {\n return this.chromaCache.get(tone);\n }\n const chroma = Hct.from(this.hue, this.maxChromaValue, tone).chroma;\n this.chromaCache.set(tone, chroma);\n return chroma;\n }\n}\n//# sourceMappingURL=tonal_palette.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as math from '../utils/math_utils.js';\n/**\n * A class containing a value that changes with the contrast level.\n *\n * Usually represents the contrast requirements for a dynamic color on its\n * background. The four values correspond to values for contrast levels -1.0,\n * 0.0, 0.5, and 1.0, respectively.\n */\nexport class ContrastCurve {\n /**\n * Creates a `ContrastCurve` object.\n *\n * @param low Value for contrast level -1.0\n * @param normal Value for contrast level 0.0\n * @param medium Value for contrast level 0.5\n * @param high Value for contrast level 1.0\n */\n constructor(low, normal, medium, high) {\n this.low = low;\n this.normal = normal;\n this.medium = medium;\n this.high = high;\n }\n /**\n * Returns the value at a given contrast level.\n *\n * @param contrastLevel The contrast level. 0.0 is the default (normal); -1.0\n * is the lowest; 1.0 is the highest.\n * @return The value. For contrast ratios, a number between 1.0 and 21.0.\n */\n get(contrastLevel) {\n if (contrastLevel <= -1.0) {\n return this.low;\n }\n else if (contrastLevel < 0.0) {\n return math.lerp(this.low, this.normal, (contrastLevel - (-1)) / 1);\n }\n else if (contrastLevel < 0.5) {\n return math.lerp(this.normal, this.medium, (contrastLevel - 0) / 0.5);\n }\n else if (contrastLevel < 1.0) {\n return math.lerp(this.medium, this.high, (contrastLevel - 0.5) / 0.5);\n }\n else {\n return this.high;\n }\n }\n}\n//# sourceMappingURL=contrast_curve.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Documents a constraint between two DynamicColors, in which their tones must\n * have a certain distance from each other.\n *\n * Prefer a DynamicColor with a background, this is for special cases when\n * designers want tonal distance, literally contrast, between two colors that\n * don't have a background / foreground relationship or a contrast guarantee.\n */\nexport class ToneDeltaPair {\n /**\n * Documents a constraint in tone distance between two DynamicColors.\n *\n * The polarity is an adjective that describes \"A\", compared to \"B\".\n *\n * For instance, ToneDeltaPair(A, B, 15, 'darker', stayTogether) states that\n * A's tone should be at least 15 darker than B's.\n *\n * 'nearer' and 'farther' describes closeness to the surface roles. For\n * instance, ToneDeltaPair(A, B, 10, 'nearer', stayTogether) states that A\n * should be 10 lighter than B in light mode, and 10 darker than B in dark\n * mode.\n *\n * @param roleA The first role in a pair.\n * @param roleB The second role in a pair.\n * @param delta Required difference between tones. Absolute value, negative\n * values have undefined behavior.\n * @param polarity The relative relation between tones of roleA and roleB,\n * as described above.\n * @param stayTogether Whether these two roles should stay on the same side of\n * the \"awkward zone\" (T50-59). This is necessary for certain cases where\n * one role has two backgrounds.\n */\n constructor(roleA, roleB, delta, polarity, stayTogether) {\n this.roleA = roleA;\n this.roleB = roleB;\n this.delta = delta;\n this.polarity = polarity;\n this.stayTogether = stayTogether;\n }\n}\n//# sourceMappingURL=tone_delta_pair.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Set of themes supported by Dynamic Color.\n * Instantiate the corresponding subclass, ex. SchemeTonalSpot, to create\n * colors corresponding to the theme.\n */\nexport var Variant;\n(function (Variant) {\n Variant[Variant[\"MONOCHROME\"] = 0] = \"MONOCHROME\";\n Variant[Variant[\"NEUTRAL\"] = 1] = \"NEUTRAL\";\n Variant[Variant[\"TONAL_SPOT\"] = 2] = \"TONAL_SPOT\";\n Variant[Variant[\"VIBRANT\"] = 3] = \"VIBRANT\";\n Variant[Variant[\"EXPRESSIVE\"] = 4] = \"EXPRESSIVE\";\n Variant[Variant[\"FIDELITY\"] = 5] = \"FIDELITY\";\n Variant[Variant[\"CONTENT\"] = 6] = \"CONTENT\";\n Variant[Variant[\"RAINBOW\"] = 7] = \"RAINBOW\";\n Variant[Variant[\"FRUIT_SALAD\"] = 8] = \"FRUIT_SALAD\";\n})(Variant || (Variant = {}));\n//# sourceMappingURL=variant.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DislikeAnalyzer } from '../dislike/dislike_analyzer.js';\nimport { Hct } from '../hct/hct.js';\nimport { ContrastCurve } from './contrast_curve.js';\nimport { DynamicColor } from './dynamic_color.js';\nimport { ToneDeltaPair } from './tone_delta_pair.js';\nimport { Variant } from './variant.js';\nfunction isFidelity(scheme) {\n return scheme.variant === Variant.FIDELITY ||\n scheme.variant === Variant.CONTENT;\n}\nfunction isMonochrome(scheme) {\n return scheme.variant === Variant.MONOCHROME;\n}\nfunction findDesiredChromaByTone(hue, chroma, tone, byDecreasingTone) {\n let answer = tone;\n let closestToChroma = Hct.from(hue, chroma, tone);\n if (closestToChroma.chroma < chroma) {\n let chromaPeak = closestToChroma.chroma;\n while (closestToChroma.chroma < chroma) {\n answer += byDecreasingTone ? -1.0 : 1.0;\n const potentialSolution = Hct.from(hue, chroma, answer);\n if (chromaPeak > potentialSolution.chroma) {\n break;\n }\n if (Math.abs(potentialSolution.chroma - chroma) < 0.4) {\n break;\n }\n const potentialDelta = Math.abs(potentialSolution.chroma - chroma);\n const currentDelta = Math.abs(closestToChroma.chroma - chroma);\n if (potentialDelta < currentDelta) {\n closestToChroma = potentialSolution;\n }\n chromaPeak = Math.max(chromaPeak, potentialSolution.chroma);\n }\n }\n return answer;\n}\n/**\n * DynamicColors for the colors in the Material Design system.\n */\n// Material Color Utilities namespaces the various utilities it provides.\n// tslint:disable-next-line:class-as-namespace\nexport class MaterialDynamicColors {\n static highestSurface(s) {\n return s.isDark ? MaterialDynamicColors.surfaceBright :\n MaterialDynamicColors.surfaceDim;\n }\n}\nMaterialDynamicColors.contentAccentToneDelta = 15.0;\nMaterialDynamicColors.primaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'primary_palette_key_color',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.primaryPalette.keyColor.tone,\n});\nMaterialDynamicColors.secondaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'secondary_palette_key_color',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.secondaryPalette.keyColor.tone,\n});\nMaterialDynamicColors.tertiaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'tertiary_palette_key_color',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => s.tertiaryPalette.keyColor.tone,\n});\nMaterialDynamicColors.neutralPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_palette_key_color',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.neutralPalette.keyColor.tone,\n});\nMaterialDynamicColors.neutralVariantPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_variant_palette_key_color',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.neutralVariantPalette.keyColor.tone,\n});\nMaterialDynamicColors.background = DynamicColor.fromPalette({\n name: 'background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n});\nMaterialDynamicColors.onBackground = DynamicColor.fromPalette({\n name: 'on_background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.background,\n contrastCurve: new ContrastCurve(3, 3, 4.5, 7),\n});\nMaterialDynamicColors.surface = DynamicColor.fromPalette({\n name: 'surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n});\nMaterialDynamicColors.surfaceDim = DynamicColor.fromPalette({\n name: 'surface_dim',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : new ContrastCurve(87, 87, 80, 75).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceBright = DynamicColor.fromPalette({\n name: 'surface_bright',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? new ContrastCurve(24, 24, 29, 34).get(s.contrastLevel) : 98,\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerLowest = DynamicColor.fromPalette({\n name: 'surface_container_lowest',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? new ContrastCurve(4, 4, 2, 0).get(s.contrastLevel) : 100,\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerLow = DynamicColor.fromPalette({\n name: 'surface_container_low',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(10, 10, 11, 12).get(s.contrastLevel) :\n new ContrastCurve(96, 96, 96, 95).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainer = DynamicColor.fromPalette({\n name: 'surface_container',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(12, 12, 16, 20).get(s.contrastLevel) :\n new ContrastCurve(94, 94, 92, 90).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerHigh = DynamicColor.fromPalette({\n name: 'surface_container_high',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(17, 17, 21, 25).get(s.contrastLevel) :\n new ContrastCurve(92, 92, 88, 85).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerHighest = DynamicColor.fromPalette({\n name: 'surface_container_highest',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(22, 22, 26, 30).get(s.contrastLevel) :\n new ContrastCurve(90, 90, 84, 80).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.onSurface = DynamicColor.fromPalette({\n name: 'on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.surfaceVariant = DynamicColor.fromPalette({\n name: 'surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n});\nMaterialDynamicColors.onSurfaceVariant = DynamicColor.fromPalette({\n name: 'on_surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 80 : 30,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.inverseSurface = DynamicColor.fromPalette({\n name: 'inverse_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 20,\n});\nMaterialDynamicColors.inverseOnSurface = DynamicColor.fromPalette({\n name: 'inverse_on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 20 : 95,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.outline = DynamicColor.fromPalette({\n name: 'outline',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 60 : 50,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1.5, 3, 4.5, 7),\n});\nMaterialDynamicColors.outlineVariant = DynamicColor.fromPalette({\n name: 'outline_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 80,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n});\nMaterialDynamicColors.shadow = DynamicColor.fromPalette({\n name: 'shadow',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n});\nMaterialDynamicColors.scrim = DynamicColor.fromPalette({\n name: 'scrim',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n});\nMaterialDynamicColors.surfaceTint = DynamicColor.fromPalette({\n name: 'surface_tint',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n});\nMaterialDynamicColors.primary = DynamicColor.fromPalette({\n name: 'primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 100 : 0;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onPrimary = DynamicColor.fromPalette({\n name: 'on_primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.primary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.primaryContainer = DynamicColor.fromPalette({\n name: 'primary_container',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isFidelity(s)) {\n return s.sourceColorHct.tone;\n }\n if (isMonochrome(s)) {\n return s.isDark ? 85 : 25;\n }\n return s.isDark ? 30 : 90;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onPrimaryContainer = DynamicColor.fromPalette({\n name: 'on_primary_container',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isFidelity(s)) {\n return DynamicColor.foregroundTone(MaterialDynamicColors.primaryContainer.tone(s), 4.5);\n }\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.primaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.inversePrimary = DynamicColor.fromPalette({\n name: 'inverse_primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 40 : 80,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n});\nMaterialDynamicColors.secondary = DynamicColor.fromPalette({\n name: 'secondary',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onSecondary = DynamicColor.fromPalette({\n name: 'on_secondary',\n palette: (s) => s.secondaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 100;\n }\n else {\n return s.isDark ? 20 : 100;\n }\n },\n background: (s) => MaterialDynamicColors.secondary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.secondaryContainer = DynamicColor.fromPalette({\n name: 'secondary_container',\n palette: (s) => s.secondaryPalette,\n tone: (s) => {\n const initialTone = s.isDark ? 30 : 90;\n if (isMonochrome(s)) {\n return s.isDark ? 30 : 85;\n }\n if (!isFidelity(s)) {\n return initialTone;\n }\n return findDesiredChromaByTone(s.secondaryPalette.hue, s.secondaryPalette.chroma, initialTone, s.isDark ? false : true);\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onSecondaryContainer = DynamicColor.fromPalette({\n name: 'on_secondary_container',\n palette: (s) => s.secondaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(MaterialDynamicColors.secondaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.secondaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.tertiary = DynamicColor.fromPalette({\n name: 'tertiary',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 25;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onTertiary = DynamicColor.fromPalette({\n name: 'on_tertiary',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.tertiary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.tertiaryContainer = DynamicColor.fromPalette({\n name: 'tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 60 : 49;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 30 : 90;\n }\n const proposedHct = s.tertiaryPalette.getHct(s.sourceColorHct.tone);\n return DislikeAnalyzer.fixIfDisliked(proposedHct).tone;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onTertiaryContainer = DynamicColor.fromPalette({\n name: 'on_tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(MaterialDynamicColors.tertiaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.tertiaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.error = DynamicColor.fromPalette({\n name: 'error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10, 'nearer', false),\n});\nMaterialDynamicColors.onError = DynamicColor.fromPalette({\n name: 'on_error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 20 : 100,\n background: (s) => MaterialDynamicColors.error,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.errorContainer = DynamicColor.fromPalette({\n name: 'error_container',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10, 'nearer', false),\n});\nMaterialDynamicColors.onErrorContainer = DynamicColor.fromPalette({\n name: 'on_error_container',\n palette: (s) => s.errorPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.errorContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.primaryFixed = DynamicColor.fromPalette({\n name: 'primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.primaryFixedDim = DynamicColor.fromPalette({\n name: 'primary_fixed_dim',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.onPrimaryFixed = DynamicColor.fromPalette({\n name: 'on_primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.onPrimaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_primary_fixed_variant',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.secondaryFixed = DynamicColor.fromPalette({\n name: 'secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 80.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.secondaryFixedDim = DynamicColor.fromPalette({\n name: 'secondary_fixed_dim',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 70.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.onSecondaryFixed = DynamicColor.fromPalette({\n name: 'on_secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => 10.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.onSecondaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_secondary_fixed_variant',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 25.0 : 30.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.tertiaryFixed = DynamicColor.fromPalette({\n name: 'tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.tertiaryFixedDim = DynamicColor.fromPalette({\n name: 'tertiary_fixed_dim',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.onTertiaryFixed = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.onTertiaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed_variant',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\n//# sourceMappingURL=material_dynamic_colors.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Hct } from '../hct/hct.js';\nimport { TonalPalette } from './tonal_palette.js';\n/**\n * An intermediate concept between the key color for a UI theme, and a full\n * color scheme. 5 sets of tones are generated, all except one use the same hue\n * as the key color, and all vary in chroma.\n */\nexport class CorePalette {\n /**\n * @param argb ARGB representation of a color\n */\n static of(argb) {\n return new CorePalette(argb, false);\n }\n /**\n * @param argb ARGB representation of a color\n */\n static contentOf(argb) {\n return new CorePalette(argb, true);\n }\n /**\n * Create a [CorePalette] from a set of colors\n */\n static fromColors(colors) {\n return CorePalette.createPaletteFromColors(false, colors);\n }\n /**\n * Create a content [CorePalette] from a set of colors\n */\n static contentFromColors(colors) {\n return CorePalette.createPaletteFromColors(true, colors);\n }\n static createPaletteFromColors(content, colors) {\n const palette = new CorePalette(colors.primary, content);\n if (colors.secondary) {\n const p = new CorePalette(colors.secondary, content);\n palette.a2 = p.a1;\n }\n if (colors.tertiary) {\n const p = new CorePalette(colors.tertiary, content);\n palette.a3 = p.a1;\n }\n if (colors.error) {\n const p = new CorePalette(colors.error, content);\n palette.error = p.a1;\n }\n if (colors.neutral) {\n const p = new CorePalette(colors.neutral, content);\n palette.n1 = p.n1;\n }\n if (colors.neutralVariant) {\n const p = new CorePalette(colors.neutralVariant, content);\n palette.n2 = p.n2;\n }\n return palette;\n }\n constructor(argb, isContent) {\n const hct = Hct.fromInt(argb);\n const hue = hct.hue;\n const chroma = hct.chroma;\n if (isContent) {\n this.a1 = TonalPalette.fromHueAndChroma(hue, chroma);\n this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2);\n this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4));\n this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8));\n }\n else {\n this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma));\n this.a2 = TonalPalette.fromHueAndChroma(hue, 16);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24);\n this.n1 = TonalPalette.fromHueAndChroma(hue, 4);\n this.n2 = TonalPalette.fromHueAndChroma(hue, 8);\n }\n this.error = TonalPalette.fromHueAndChroma(25, 84);\n }\n}\n//# sourceMappingURL=core_palette.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport { CorePalette } from '../palettes/core_palette.js';\n/**\n * DEPRECATED. The `Scheme` class is deprecated in favor of `DynamicScheme`.\n * Please see\n * https://github.com/material-foundation/material-color-utilities/blob/main/make_schemes.md\n * for migration guidance.\n *\n * Represents a Material color scheme, a mapping of color roles to colors.\n */\nexport class Scheme {\n get primary() {\n return this.props.primary;\n }\n get onPrimary() {\n return this.props.onPrimary;\n }\n get primaryContainer() {\n return this.props.primaryContainer;\n }\n get onPrimaryContainer() {\n return this.props.onPrimaryContainer;\n }\n get secondary() {\n return this.props.secondary;\n }\n get onSecondary() {\n return this.props.onSecondary;\n }\n get secondaryContainer() {\n return this.props.secondaryContainer;\n }\n get onSecondaryContainer() {\n return this.props.onSecondaryContainer;\n }\n get tertiary() {\n return this.props.tertiary;\n }\n get onTertiary() {\n return this.props.onTertiary;\n }\n get tertiaryContainer() {\n return this.props.tertiaryContainer;\n }\n get onTertiaryContainer() {\n return this.props.onTertiaryContainer;\n }\n get error() {\n return this.props.error;\n }\n get onError() {\n return this.props.onError;\n }\n get errorContainer() {\n return this.props.errorContainer;\n }\n get onErrorContainer() {\n return this.props.onErrorContainer;\n }\n get background() {\n return this.props.background;\n }\n get onBackground() {\n return this.props.onBackground;\n }\n get surface() {\n return this.props.surface;\n }\n get onSurface() {\n return this.props.onSurface;\n }\n get surfaceVariant() {\n return this.props.surfaceVariant;\n }\n get onSurfaceVariant() {\n return this.props.onSurfaceVariant;\n }\n get outline() {\n return this.props.outline;\n }\n get outlineVariant() {\n return this.props.outlineVariant;\n }\n get shadow() {\n return this.props.shadow;\n }\n get scrim() {\n return this.props.scrim;\n }\n get inverseSurface() {\n return this.props.inverseSurface;\n }\n get inverseOnSurface() {\n return this.props.inverseOnSurface;\n }\n get inversePrimary() {\n return this.props.inversePrimary;\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material color scheme, based on the color's hue.\n */\n static light(argb) {\n return Scheme.lightFromCorePalette(CorePalette.of(argb));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material color scheme, based on the color's hue.\n */\n static dark(argb) {\n return Scheme.darkFromCorePalette(CorePalette.of(argb));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material content color scheme, based on the color's hue.\n */\n static lightContent(argb) {\n return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material content color scheme, based on the color's hue.\n */\n static darkContent(argb) {\n return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));\n }\n /**\n * Light scheme from core palette\n */\n static lightFromCorePalette(core) {\n return new Scheme({\n primary: core.a1.tone(40),\n onPrimary: core.a1.tone(100),\n primaryContainer: core.a1.tone(90),\n onPrimaryContainer: core.a1.tone(10),\n secondary: core.a2.tone(40),\n onSecondary: core.a2.tone(100),\n secondaryContainer: core.a2.tone(90),\n onSecondaryContainer: core.a2.tone(10),\n tertiary: core.a3.tone(40),\n onTertiary: core.a3.tone(100),\n tertiaryContainer: core.a3.tone(90),\n onTertiaryContainer: core.a3.tone(10),\n error: core.error.tone(40),\n onError: core.error.tone(100),\n errorContainer: core.error.tone(90),\n onErrorContainer: core.error.tone(10),\n background: core.n1.tone(99),\n onBackground: core.n1.tone(10),\n surface: core.n1.tone(99),\n onSurface: core.n1.tone(10),\n surfaceVariant: core.n2.tone(90),\n onSurfaceVariant: core.n2.tone(30),\n outline: core.n2.tone(50),\n outlineVariant: core.n2.tone(80),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(20),\n inverseOnSurface: core.n1.tone(95),\n inversePrimary: core.a1.tone(80)\n });\n }\n /**\n * Dark scheme from core palette\n */\n static darkFromCorePalette(core) {\n return new Scheme({\n primary: core.a1.tone(80),\n onPrimary: core.a1.tone(20),\n primaryContainer: core.a1.tone(30),\n onPrimaryContainer: core.a1.tone(90),\n secondary: core.a2.tone(80),\n onSecondary: core.a2.tone(20),\n secondaryContainer: core.a2.tone(30),\n onSecondaryContainer: core.a2.tone(90),\n tertiary: core.a3.tone(80),\n onTertiary: core.a3.tone(20),\n tertiaryContainer: core.a3.tone(30),\n onTertiaryContainer: core.a3.tone(90),\n error: core.error.tone(80),\n onError: core.error.tone(20),\n errorContainer: core.error.tone(30),\n onErrorContainer: core.error.tone(80),\n background: core.n1.tone(10),\n onBackground: core.n1.tone(90),\n surface: core.n1.tone(10),\n onSurface: core.n1.tone(90),\n surfaceVariant: core.n2.tone(30),\n onSurfaceVariant: core.n2.tone(80),\n outline: core.n2.tone(60),\n outlineVariant: core.n2.tone(30),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(90),\n inverseOnSurface: core.n1.tone(20),\n inversePrimary: core.a1.tone(40)\n });\n }\n constructor(props) {\n this.props = props;\n }\n toJSON() {\n return {\n ...this.props\n };\n }\n}\n//# sourceMappingURL=scheme.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as colorUtils from './color_utils.js';\n/**\n * Utility methods for hexadecimal representations of colors.\n */\n/**\n * @param argb ARGB representation of a color.\n * @return Hex string representing color, ex. #ff0000 for red.\n */\nexport function hexFromArgb(argb) {\n const r = colorUtils.redFromArgb(argb);\n const g = colorUtils.greenFromArgb(argb);\n const b = colorUtils.blueFromArgb(argb);\n const outParts = [r.toString(16), g.toString(16), b.toString(16)];\n // Pad single-digit output values\n for (const [i, part] of outParts.entries()) {\n if (part.length === 1) {\n outParts[i] = '0' + part;\n }\n }\n return '#' + outParts.join('');\n}\n/**\n * @param hex String representing color as hex code. Accepts strings with or\n * without leading #, and string representing the color using 3, 6, or 8\n * hex characters.\n * @return ARGB representation of color.\n */\nexport function argbFromHex(hex) {\n hex = hex.replace('#', '');\n const isThree = hex.length === 3;\n const isSix = hex.length === 6;\n const isEight = hex.length === 8;\n if (!isThree && !isSix && !isEight) {\n throw new Error('unexpected hex ' + hex);\n }\n let r = 0;\n let g = 0;\n let b = 0;\n if (isThree) {\n r = parseIntHex(hex.slice(0, 1).repeat(2));\n g = parseIntHex(hex.slice(1, 2).repeat(2));\n b = parseIntHex(hex.slice(2, 3).repeat(2));\n }\n else if (isSix) {\n r = parseIntHex(hex.slice(0, 2));\n g = parseIntHex(hex.slice(2, 4));\n b = parseIntHex(hex.slice(4, 6));\n }\n else if (isEight) {\n r = parseIntHex(hex.slice(2, 4));\n g = parseIntHex(hex.slice(4, 6));\n b = parseIntHex(hex.slice(6, 8));\n }\n return (((255 << 24) | ((r & 0x0ff) << 16) | ((g & 0x0ff) << 8) | (b & 0x0ff)) >>>\n 0);\n}\nfunction parseIntHex(value) {\n // tslint:disable-next-line:ban\n return parseInt(value, 16);\n}\n//# sourceMappingURL=string_utils.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Blend } from '../blend/blend.js';\nimport { CorePalette } from '../palettes/core_palette.js';\nimport { Scheme } from '../scheme/scheme.js';\nimport { sourceColorFromImage } from './image_utils.js';\nimport { hexFromArgb } from './string_utils.js';\n/**\n * Generate a theme from a source color\n *\n * @param source Source color\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport function themeFromSourceColor(source, customColors = []) {\n const palette = CorePalette.of(source);\n return {\n source,\n schemes: {\n light: Scheme.light(source),\n dark: Scheme.dark(source),\n },\n palettes: {\n primary: palette.a1,\n secondary: palette.a2,\n tertiary: palette.a3,\n neutral: palette.n1,\n neutralVariant: palette.n2,\n error: palette.error,\n },\n customColors: customColors.map((c) => customColor(source, c)),\n };\n}\n/**\n * Generate a theme from an image source\n *\n * @param image Image element\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport async function themeFromImage(image, customColors = []) {\n const source = await sourceColorFromImage(image);\n return themeFromSourceColor(source, customColors);\n}\n/**\n * Generate custom color group from source and target color\n *\n * @param source Source color\n * @param color Custom color\n * @return Custom color group\n *\n * @link https://m3.material.io/styles/color/the-color-system/color-roles\n */\nexport function customColor(source, color) {\n let value = color.value;\n const from = value;\n const to = source;\n if (color.blend) {\n value = Blend.harmonize(from, to);\n }\n const palette = CorePalette.of(value);\n const tones = palette.a1;\n return {\n color,\n value,\n light: {\n color: tones.tone(40),\n onColor: tones.tone(100),\n colorContainer: tones.tone(90),\n onColorContainer: tones.tone(10),\n },\n dark: {\n color: tones.tone(80),\n onColor: tones.tone(20),\n colorContainer: tones.tone(30),\n onColorContainer: tones.tone(90),\n },\n };\n}\n/**\n * Apply a theme to an element\n *\n * @param theme Theme object\n * @param options Options\n */\nexport function applyTheme(theme, options) {\n const target = options?.target || document.body;\n const isDark = options?.dark ?? false;\n const scheme = isDark ? theme.schemes.dark : theme.schemes.light;\n setSchemeProperties(target, scheme);\n if (options?.brightnessSuffix) {\n setSchemeProperties(target, theme.schemes.dark, '-dark');\n setSchemeProperties(target, theme.schemes.light, '-light');\n }\n if (options?.paletteTones) {\n const tones = options?.paletteTones ?? [];\n for (const [key, palette] of Object.entries(theme.palettes)) {\n const paletteKey = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n for (const tone of tones) {\n const token = `--md-ref-palette-${paletteKey}-${paletteKey}${tone}`;\n const color = hexFromArgb(palette.tone(tone));\n target.style.setProperty(token, color);\n }\n }\n }\n}\nfunction setSchemeProperties(target, scheme, suffix = '') {\n for (const [key, value] of Object.entries(scheme.toJSON())) {\n const token = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const color = hexFromArgb(value);\n target.style.setProperty(`--md-sys-color-${token}${suffix}`, color);\n }\n}\n//# sourceMappingURL=theme_utils.js.map","import { argbFromHex, Hct, hexFromArgb, Theme, TonalPalette } from '@material/material-color-utilities'\nimport { TSchmancyTheme } from './theme.interface'\n\n/**\n * Material Design 3 Theme Formatter\n * Generates complete M3 theme with all tonal values and design tokens\n * @see https://m3.material.io/styles/color/the-color-system\n */\n\n/**\n * Converts ARGB integer to hex string\n */\nfunction argbToHex(argb: number): string {\n\treturn hexFromArgb(argb)\n}\n\n/**\n * Creates a complete tonal palette from a source color\n */\nfunction createTonalPalette(sourceColor: number): Record<string, string> {\n\tconst hct = Hct.fromInt(sourceColor)\n\tconst palette = TonalPalette.fromHueAndChroma(hct.hue, hct.chroma)\n\n\treturn {\n\t\t'0': argbToHex(palette.tone(0)),\n\t\t'10': argbToHex(palette.tone(10)),\n\t\t'20': argbToHex(palette.tone(20)),\n\t\t'30': argbToHex(palette.tone(30)),\n\t\t'40': argbToHex(palette.tone(40)),\n\t\t'50': argbToHex(palette.tone(50)),\n\t\t'60': argbToHex(palette.tone(60)),\n\t\t'70': argbToHex(palette.tone(70)),\n\t\t'80': argbToHex(palette.tone(80)),\n\t\t'90': argbToHex(palette.tone(90)),\n\t\t'95': argbToHex(palette.tone(95)),\n\t\t'99': argbToHex(palette.tone(99)),\n\t\t'100': argbToHex(palette.tone(100)),\n\t}\n}\n\n/**\n * Generates a complete Material Design 3 theme\n * @param originalTheme The generated theme from Material Color Utilities\n * @param isDark Whether to generate a dark theme\n * @param extendedColors Optional extended colors (success, warning, info)\n */\nexport function formateTheme(\n\toriginalTheme: Theme,\n\tisDark = false,\n\textendedColors?: {\n\t\tsuccess?: number\n\t\twarning?: number\n\t\tinfo?: number\n\t}\n): Partial<TSchmancyTheme> {\n\tconst scheme = isDark ? originalTheme.schemes.dark : originalTheme.schemes.light\n\n\t// Generate complete tonal palettes\n\tconst primaryPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.primary.hue,\n\t\toriginalTheme.palettes.primary.chroma\n\t)\n\tconst secondaryPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.secondary.hue,\n\t\toriginalTheme.palettes.secondary.chroma\n\t)\n\tconst tertiaryPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.tertiary.hue,\n\t\toriginalTheme.palettes.tertiary.chroma\n\t)\n\tconst neutralPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.neutral.hue,\n\t\toriginalTheme.palettes.neutral.chroma\n\t)\n\tconst neutralVariantPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.neutralVariant.hue,\n\t\toriginalTheme.palettes.neutralVariant.chroma\n\t)\n\tconst errorPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.error.hue,\n\t\toriginalTheme.palettes.error.chroma\n\t)\n\n\t// Generate extended color palettes\n\tconst successPalette = extendedColors?.success\n\t\t? createTonalPalette(extendedColors.success)\n\t\t: createTonalPalette(argbFromHex('#00C853')) // Green A700\n\n\tconst warningPalette = extendedColors?.warning\n\t\t? createTonalPalette(extendedColors.warning)\n\t\t: createTonalPalette(argbFromHex('#FFD600')) // Amber A700\n\n\tconst infoPalette = extendedColors?.info\n\t\t? createTonalPalette(extendedColors.info)\n\t\t: createTonalPalette(argbFromHex('#2979FF')) // Blue A400\n\n\t// M3 tone values for each color role in light/dark themes\n\tconst tones = {\n\t\tprimary: isDark ? 80 : 40,\n\t\tonPrimary: isDark ? 20 : 100,\n\t\tprimaryContainer: isDark ? 30 : 90,\n\t\tonPrimaryContainer: isDark ? 90 : 10,\n\t\tprimaryFixed: 90,\n\t\tprimaryFixedDim: 80,\n\t\tonPrimaryFixed: 10,\n\t\tonPrimaryFixedVariant: 30,\n\t\tinversePrimary: isDark ? 40 : 80,\n\n\t\tsecondary: isDark ? 80 : 40,\n\t\tonSecondary: isDark ? 20 : 100,\n\t\tsecondaryContainer: isDark ? 30 : 90,\n\t\tonSecondaryContainer: isDark ? 90 : 10,\n\t\tsecondaryFixed: 90,\n\t\tsecondaryFixedDim: 80,\n\t\tonSecondaryFixed: 10,\n\t\tonSecondaryFixedVariant: 30,\n\n\t\ttertiary: isDark ? 80 : 40,\n\t\tonTertiary: isDark ? 20 : 100,\n\t\ttertiaryContainer: isDark ? 30 : 90,\n\t\tonTertiaryContainer: isDark ? 90 : 10,\n\t\ttertiaryFixed: 90,\n\t\ttertiaryFixedDim: 80,\n\t\tonTertiaryFixed: 10,\n\t\tonTertiaryFixedVariant: 30,\n\n\t\terror: isDark ? 50 : 40,\n\t\tonError: isDark ? 100 : 100,\n\t\terrorContainer: isDark ? 30 : 90,\n\t\tonErrorContainer: isDark ? 90 : 10,\n\n\t\tsurface: isDark ? 6 : 98,\n\t\tsurfaceDim: isDark ? 6 : 87,\n\t\tsurfaceBright: isDark ? 24 : 98,\n\t\tsurfaceContainerLowest: isDark ? 4 : 100,\n\t\tsurfaceContainerLow: isDark ? 10 : 96,\n\t\tsurfaceContainer: isDark ? 12 : 94,\n\t\tsurfaceContainerHigh: isDark ? 17 : 92,\n\t\tsurfaceContainerHighest: isDark ? 22 : 90,\n\t\tonSurface: isDark ? 90 : 10,\n\t\tonSurfaceVariant: isDark ? 80 : 30,\n\t\tsurfaceTint: isDark ? 80 : 40,\n\t\tinverseSurface: isDark ? 90 : 20,\n\t\tinverseOnSurface: isDark ? 20 : 95,\n\n\t\toutline: isDark ? 60 : 50,\n\t\toutlineVariant: isDark ? 15 : 80,\n\t\tshadow: 0,\n\t\tscrim: 0,\n\t}\n\n\tconst newTheme: Partial<TSchmancyTheme> = {\n\t\tsys: {\n\t\t\tcolor: {\n\t\t\t\t// Neutral colors\n\t\t\t\tscrim: argbToHex(scheme.scrim),\n\t\t\t\toutline: argbToHex(neutralVariantPalette.tone(tones.outline)),\n\t\t\t\toutlineVariant: argbToHex(neutralVariantPalette.tone(tones.outlineVariant)),\n\t\t\t\tshadow: argbToHex(neutralPalette.tone(tones.shadow)),\n\n\t\t\t\t// Surface colors with complete tonal values\n\t\t\t\tsurface: {\n\t\t\t\t\tdefault: argbToHex(neutralPalette.tone(tones.surface)),\n\t\t\t\t\tdim: argbToHex(neutralPalette.tone(tones.surfaceDim)),\n\t\t\t\t\tbright: argbToHex(neutralPalette.tone(tones.surfaceBright)),\n\t\t\t\t\tcontainer: argbToHex(neutralPalette.tone(tones.surfaceContainer)),\n\t\t\t\t\tcontainerLow: argbToHex(neutralPalette.tone(tones.surfaceContainerLow)),\n\t\t\t\t\tcontainerLowest: argbToHex(neutralPalette.tone(tones.surfaceContainerLowest)),\n\t\t\t\t\tcontainerHigh: argbToHex(neutralPalette.tone(tones.surfaceContainerHigh)),\n\t\t\t\t\tcontainerHighest: argbToHex(neutralPalette.tone(tones.surfaceContainerHighest)),\n\t\t\t\t\ton: argbToHex(neutralPalette.tone(tones.onSurface)),\n\t\t\t\t\tonVariant: argbToHex(neutralVariantPalette.tone(tones.onSurfaceVariant)),\n\t\t\t\t\ttint: argbToHex(primaryPalette.tone(tones.surfaceTint)),\n\t\t\t\t\tinverse: argbToHex(neutralPalette.tone(tones.inverseSurface)),\n\t\t\t\t\tinverseOn: argbToHex(neutralPalette.tone(tones.inverseOnSurface)),\n\t\t\t\t\t// Deprecated mappings for backward compatibility\n\t\t\t\t\tlow: argbToHex(neutralPalette.tone(tones.surfaceContainerLow)),\n\t\t\t\t\thigh: argbToHex(neutralPalette.tone(tones.surfaceContainerHigh)),\n\t\t\t\t\thighest: argbToHex(neutralPalette.tone(tones.surfaceContainerHighest)),\n\t\t\t\t\tlowest: argbToHex(neutralPalette.tone(tones.surfaceContainerLowest)),\n\t\t\t\t},\n\n\t\t\t\t// Primary color roles with fixed variants\n\t\t\t\tprimary: {\n\t\t\t\t\tdefault: argbToHex(primaryPalette.tone(tones.primary)),\n\t\t\t\t\ton: argbToHex(primaryPalette.tone(tones.onPrimary)),\n\t\t\t\t\tcontainer: argbToHex(primaryPalette.tone(tones.primaryContainer)),\n\t\t\t\t\tonContainer: argbToHex(primaryPalette.tone(tones.onPrimaryContainer)),\n\t\t\t\t\tfixed: argbToHex(primaryPalette.tone(tones.primaryFixed)),\n\t\t\t\t\tfixedDim: argbToHex(primaryPalette.tone(tones.primaryFixedDim)),\n\t\t\t\t\tonFixed: argbToHex(primaryPalette.tone(tones.onPrimaryFixed)),\n\t\t\t\t\tonFixedVariant: argbToHex(primaryPalette.tone(tones.onPrimaryFixedVariant)),\n\t\t\t\t\tinverse: argbToHex(primaryPalette.tone(tones.inversePrimary)),\n\t\t\t\t},\n\n\t\t\t\t// Secondary color roles with fixed variants\n\t\t\t\tsecondary: {\n\t\t\t\t\tdefault: argbToHex(secondaryPalette.tone(tones.secondary)),\n\t\t\t\t\ton: argbToHex(secondaryPalette.tone(tones.onSecondary)),\n\t\t\t\t\tcontainer: argbToHex(secondaryPalette.tone(tones.secondaryContainer)),\n\t\t\t\t\tonContainer: argbToHex(secondaryPalette.tone(tones.onSecondaryContainer)),\n\t\t\t\t\tfixed: argbToHex(secondaryPalette.tone(tones.secondaryFixed)),\n\t\t\t\t\tfixedDim: argbToHex(secondaryPalette.tone(tones.secondaryFixedDim)),\n\t\t\t\t\tonFixed: argbToHex(secondaryPalette.tone(tones.onSecondaryFixed)),\n\t\t\t\t\tonFixedVariant: argbToHex(secondaryPalette.tone(tones.onSecondaryFixedVariant)),\n\t\t\t\t},\n\n\t\t\t\t// Tertiary color roles with fixed variants\n\t\t\t\ttertiary: {\n\t\t\t\t\tdefault: argbToHex(tertiaryPalette.tone(tones.tertiary)),\n\t\t\t\t\ton: argbToHex(tertiaryPalette.tone(tones.onTertiary)),\n\t\t\t\t\tcontainer: argbToHex(tertiaryPalette.tone(tones.tertiaryContainer)),\n\t\t\t\t\tonContainer: argbToHex(tertiaryPalette.tone(tones.onTertiaryContainer)),\n\t\t\t\t\tfixed: argbToHex(tertiaryPalette.tone(tones.tertiaryFixed)),\n\t\t\t\t\tfixedDim: argbToHex(tertiaryPalette.tone(tones.tertiaryFixedDim)),\n\t\t\t\t\tonFixed: argbToHex(tertiaryPalette.tone(tones.onTertiaryFixed)),\n\t\t\t\t\tonFixedVariant: argbToHex(tertiaryPalette.tone(tones.onTertiaryFixedVariant)),\n\t\t\t\t},\n\n\t\t\t\t// Error color roles\n\t\t\t\terror: {\n\t\t\t\t\tdefault: argbToHex(errorPalette.tone(tones.error)),\n\t\t\t\t\ton: argbToHex(errorPalette.tone(tones.onError)),\n\t\t\t\t\tcontainer: argbToHex(errorPalette.tone(tones.errorContainer)),\n\t\t\t\t\tonContainer: argbToHex(errorPalette.tone(tones.onErrorContainer)),\n\t\t\t\t},\n\n\t\t\t\t// Extended color roles - Success\n\t\t\t\tsuccess: {\n\t\t\t\t\tdefault: successPalette[isDark ? '80' : '40'],\n\t\t\t\t\ton: successPalette[isDark ? '20' : '100'],\n\t\t\t\t\tcontainer: successPalette[isDark ? '30' : '90'],\n\t\t\t\t\tonContainer: successPalette[isDark ? '90' : '10'],\n\t\t\t\t},\n\n\t\t\t\t// Extended color roles - Warning\n\t\t\t\twarning: {\n\t\t\t\t\tdefault: warningPalette[isDark ? '80' : '40'],\n\t\t\t\t\ton: warningPalette[isDark ? '20' : '100'],\n\t\t\t\t\tcontainer: warningPalette[isDark ? '30' : '90'],\n\t\t\t\t\tonContainer: warningPalette[isDark ? '90' : '10'],\n\t\t\t\t},\n\n\t\t\t\t// Extended color roles - Info\n\t\t\t\tinfo: {\n\t\t\t\t\tdefault: infoPalette[isDark ? '80' : '40'],\n\t\t\t\t\ton: infoPalette[isDark ? '20' : '100'],\n\t\t\t\t\tcontainer: infoPalette[isDark ? '30' : '90'],\n\t\t\t\t\tonContainer: infoPalette[isDark ? '90' : '10'],\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Typography System values (will be properly set in CSS)\n\t\t\ttypography: {\n\t\t\t\tdisplay: {\n\t\t\t\t\tlarge: 'display-large',\n\t\t\t\t\tmedium: 'display-medium',\n\t\t\t\t\tsmall: 'display-small',\n\t\t\t\t},\n\t\t\t\theadline: {\n\t\t\t\t\tlarge: 'headline-large',\n\t\t\t\t\tmedium: 'headline-medium',\n\t\t\t\t\tsmall: 'headline-small',\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\tlarge: 'title-large',\n\t\t\t\t\tmedium: 'title-medium',\n\t\t\t\t\tsmall: 'title-small',\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\tlarge: 'body-large',\n\t\t\t\t\tmedium: 'body-medium',\n\t\t\t\t\tsmall: 'body-small',\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tlarge: 'label-large',\n\t\t\t\t\tmedium: 'label-medium',\n\t\t\t\t\tsmall: 'label-small',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Shape System\n\t\t\tshape: {\n\t\t\t\tcorner: {\n\t\t\t\t\tnone: '0',\n\t\t\t\t\textraSmall: '4px',\n\t\t\t\t\tsmall: '8px',\n\t\t\t\t\tmedium: '12px',\n\t\t\t\t\tlarge: '16px',\n\t\t\t\t\textraLarge: '28px',\n\t\t\t\t\tfull: '9999px',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Elevation System with tinted shadows\n\t\t\televation: {\n\t\t\t\t0: '0 0 0 0 rgba(0, 0, 0, 0)',\n\t\t\t\t1: `0px 1px 2px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 1px 3px 1px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t2: `0px 1px 2px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 2px 6px 2px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t3: `0px 1px 3px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 4px 8px 3px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t4: `0px 2px 3px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 6px 10px 4px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t5: `0px 4px 4px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 8px 12px 6px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t},\n\n\t\t\t// M3 Motion System\n\t\t\tmotion: {\n\t\t\t\teasing: {\n\t\t\t\t\temphasized: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\t\t\temphasizedDecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',\n\t\t\t\t\temphasizedAccelerate: 'cubic-bezier(0.3, 0.0, 0.8, 0.15)',\n\t\t\t\t\tstandard: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\t\t\tstandardDecelerate: 'cubic-bezier(0, 0, 0, 1)',\n\t\t\t\t\tstandardAccelerate: 'cubic-bezier(0.3, 0, 1, 1)',\n\t\t\t\t\tlegacy: 'cubic-bezier(0.4, 0, 0.2, 1)',\n\t\t\t\t\tlinear: 'linear',\n\t\t\t\t},\n\t\t\t\tduration: {\n\t\t\t\t\tshort1: '50ms',\n\t\t\t\t\tshort2: '100ms',\n\t\t\t\t\tshort3: '150ms',\n\t\t\t\t\tshort4: '200ms',\n\t\t\t\t\tmedium1: '250ms',\n\t\t\t\t\tmedium2: '300ms',\n\t\t\t\t\tmedium3: '350ms',\n\t\t\t\t\tmedium4: '400ms',\n\t\t\t\t\tlong1: '450ms',\n\t\t\t\t\tlong2: '500ms',\n\t\t\t\t\tlong3: '550ms',\n\t\t\t\t\tlong4: '600ms',\n\t\t\t\t\textraLong1: '700ms',\n\t\t\t\t\textraLong2: '800ms',\n\t\t\t\t\textraLong3: '900ms',\n\t\t\t\t\textraLong4: '1000ms',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 State Layers\n\t\t\tstate: {\n\t\t\t\topacity: {\n\t\t\t\t\thover: '0.08',\n\t\t\t\t\tfocus: '0.12',\n\t\t\t\t\tpressed: '0.12',\n\t\t\t\t\tdragged: '0.16',\n\t\t\t\t\tdisabled: '0.38',\n\t\t\t\t\tdisabledContainer: '0.12',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Spacing System (4dp grid)\n\t\t\tspacing: {\n\t\t\t\t0: '0',\n\t\t\t\t1: '4px',\n\t\t\t\t2: '8px',\n\t\t\t\t3: '12px',\n\t\t\t\t4: '16px',\n\t\t\t\t5: '20px',\n\t\t\t\t6: '24px',\n\t\t\t\t7: '28px',\n\t\t\t\t8: '32px',\n\t\t\t\t9: '36px',\n\t\t\t\t10: '40px',\n\t\t\t\t11: '44px',\n\t\t\t\t12: '48px',\n\t\t\t},\n\n\t\t\t// Legacy outline for backward compatibility\n\t\t\toutline: {\n\t\t\t\t1: '1px',\n\t\t\t},\n\t\t},\n\n\t\t// Reference palette - complete tonal values\n\t\tref: {\n\t\t\tpalette: {\n\t\t\t\tprimary: createTonalPalette(primaryPalette.tone(40)) as any,\n\t\t\t\tsecondary: createTonalPalette(secondaryPalette.tone(40)) as any,\n\t\t\t\ttertiary: createTonalPalette(tertiaryPalette.tone(40)) as any,\n\t\t\t\tneutral: createTonalPalette(neutralPalette.tone(40)) as any,\n\t\t\t\tneutralVariant: createTonalPalette(neutralVariantPalette.tone(40)) as any,\n\t\t\t\terror: createTonalPalette(errorPalette.tone(40)) as any,\n\t\t\t},\n\t\t},\n\t}\n\n\treturn newTheme\n}\n\n/**\n * Backward compatibility wrapper for the old API\n */\nexport function createLightTonalPaletteFromBaseColor(hue: number, chroma: number) {\n\tconst tonalPalette = TonalPalette.fromHueAndChroma(hue, chroma)\n\treturn {\n\t\tcLowest: tonalPalette.tone(100),\n\t\tcLow: tonalPalette.tone(96),\n\t\tc: tonalPalette.tone(94),\n\t\tcHigh: tonalPalette.tone(92),\n\t\tcHighest: tonalPalette.tone(90),\n\t\tsDim: tonalPalette.tone(87),\n\t\ts: tonalPalette.tone(98),\n\t\tsBright: tonalPalette.tone(100),\n\t}\n}\n\nexport function createDarkTonalPaletteFromBaseColor(hue: number, chroma: number) {\n\tconst tonalPalette = TonalPalette.fromHueAndChroma(hue, chroma)\n\treturn {\n\t\tcLowest: tonalPalette.tone(4),\n\t\tcLow: tonalPalette.tone(10),\n\t\tc: tonalPalette.tone(12),\n\t\tcHigh: tonalPalette.tone(17),\n\t\tcHighest: tonalPalette.tone(22),\n\t\tsDim: tonalPalette.tone(6),\n\t\ts: tonalPalette.tone(6),\n\t\tsBright: tonalPalette.tone(24),\n\t}\n}\n","import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { createContext } from '../store'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Single context for all theme settings\nconst ThemeContext = createContext<ThemeSettings>(\n { scheme: 'auto', color: '#6200ee' },\n 'local',\n 'schmancy-theme-settings'\n)\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n// Export singleton instance\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme","import { createContext } from '@lit/context'\nimport { TSchmancyTheme } from './theme.interface'\n\n/**\n * Lit Context for sharing theme configuration across components.\\n *\n * This context is provided by SchmancyThemeComponent and can be consumed\n * by any child component to access the current theme configuration.\n *\n * @type {Context<Partial<TSchmancyTheme>>}\n *\n * @example\n * ```typescript\n * import { consume } from '@lit/context'\n * import { themeContext } from '@schmancy/theme'\n *\n * class MyComponent extends LitElement {\n * @consume({ context: themeContext })\n * theme?: Partial<TSchmancyTheme>\n *\n * render() {\n * // Access theme variables\n * const primaryColor = this.theme?.sys?.color?.primary?.default\n * // ...\n * }\n * }\n * ```\n */\nexport const themeContext = createContext<Partial<TSchmancyTheme>>('theme-context')\n","import { provide } from '@lit/context'\nimport { argbFromHex, themeFromSourceColor } from '@material/material-color-utilities'\nimport { $LitElement } from '@mixins/index'\nimport { html, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { Observable, of, switchMap, fromEvent, takeUntil } from 'rxjs'\nimport { themeContext } from './context'\nimport { formateTheme } from './theme.format'\nimport { TSchmancyTheme } from './theme.interface'\nimport { ThemeHereIAm, ThemeWhereAreYou, ThemeWhereAreYouEvent } from './theme.events'\nimport style from './theme.style.css?inline'\nexport const tailwindStyles = unsafeCSS(style)\nconst mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\nconst $colorScheme = new Observable<string>(subscriber => {\n\t// Emit the initial value\n\tconst initialColorScheme = mediaQuery.matches ? 'dark' : 'light'\n\tsubscriber.next(initialColorScheme)\n\n\t// Subscribe to media query changes using RxJS\n\tconst subscription = fromEvent<MediaQueryListEvent>(mediaQuery, 'change')\n\t\t.subscribe(e => {\n\t\t\tconst newColorScheme = e.matches ? 'dark' : 'light'\n\t\t\tsubscriber.next(newColorScheme)\n\t\t})\n\n\t// On unsubscribe, unsubscribe from the RxJS subscription\n\treturn () => subscription.unsubscribe()\n})\n\n/**\n * SchmancyThemeComponent - Provides theming capabilities for Schmancy components.\n *\n * This component manages color schemes, primary colors, and theme distribution\n * throughout the component tree. It can be used at the root level or nested\n * to provide different themes to different parts of the application.\n *\n * @element schmancy-theme\n *\n * @example\n * ```html\n * <!-- Root theme provider -->\n * <schmancy-theme color=\"#6200ee\" scheme=\"auto\" root>\n * <your-app></your-app>\n * </schmancy-theme>\n *\n * <!-- Nested theme for specific section -->\n * <schmancy-theme color=\"#2196f3\" scheme=\"dark\">\n * <div class=\"dark-section\">\n * <!-- Components here will use blue dark theme -->\n * </div>\n * </schmancy-theme>\n * ```\n */\n@customElement('schmancy-theme')\nexport class SchmancyThemeComponent extends $LitElement(tailwindStyles) {\n\t/**\n\t * Primary color for the theme in hex format.\n\t * @attr color\n\t * @type {string}\n\t * @default Random generated color\n\t * @example \"#6200ee\"\n\t */\n\t@property({ type: String, reflect: true })\n\tcolor: string\n\n\t/**\n\t * Color scheme for the theme.\n\t * @attr scheme\n\t * @type {'dark' | 'light' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ type: String }) scheme: 'dark' | 'light' | 'auto' = 'auto'\n\n\t/**\n\t * Whether this theme should be applied at the root level (document.body).\n\t * @attr root\n\t * @type {boolean}\n\t * @default false\n\t */\n\t@property({ type: Boolean }) root = false\n\n\t/**\n\t * Unique name for this theme instance (used for session storage).\n\t * If not provided, will be generated from DOM path.\n\t * @attr name\n\t * @type {string}\n\t */\n\t@property({ type: String }) name?: string\n\n\t/**\n\t * Theme configuration object containing all theme variables.\n\t * @property {Partial<TSchmancyTheme>} theme\n\t * @internal\n\t */\n\t@provide({\n\t\tcontext: themeContext,\n\t})\n\t@property({ type: Object })\n\ttheme: Partial<TSchmancyTheme> = {}\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Generate unique theme name for session storage\n\t\tconst themeName = this.generateThemeName()\n\n\t\t// Priority 1: Session storage\n\t\tconst storedColor = sessionStorage.getItem(`schmancy-theme-${themeName}-color`)\n\t\tconst storedScheme = sessionStorage.getItem(`schmancy-theme-${themeName}-scheme`)\n\n\t\t// Priority 2: Properties (if set via attributes)\n\t\t// Priority 3: Random generation\n\t\tif (!this.color) {\n\t\t\tthis.color = storedColor || this.generateRandomColor()\n\t\t\t// Save the initial color to session storage\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-color`, this.color)\n\t\t}\n\n\t\tif (!this.hasAttribute('scheme') && storedScheme) {\n\t\t\tthis.scheme = storedScheme as 'dark' | 'light' | 'auto'\n\t\t}\n\n\t\t// Watch only OWN scheme property (independent per instance)\n\t\tof(this.scheme).pipe(\n\t\t\tswitchMap(scheme => {\n\t\t\t\tif (scheme === 'auto') return $colorScheme\n\t\t\t\treturn of(scheme)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe(scheme => {\n\t\t\tthis.scheme = scheme as 'dark' | 'light'\n\t\t\tthis.registerTheme()\n\t\t\t// Save to session storage with unique theme name\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-scheme`, this.scheme)\n\t\t})\n\n\t\t// Listen for generic theme discovery events\n\t\tfromEvent<ThemeWhereAreYouEvent>(this, ThemeWhereAreYou).pipe(\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe((e) => {\n\t\t\te.stopPropagation()\n\t\t\te.preventDefault()\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent(ThemeHereIAm, {\n\t\t\t\t\tdetail: { theme: this },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t})\n\t}\n\n\tupdated(changedProperties: Map<string | number | symbol, unknown>): void {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Generate unique theme name for session storage\n\t\tconst themeName = this.generateThemeName()\n\n\t\t// Re-register theme and save to session when properties change\n\t\tif (changedProperties.has('color')) {\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-color`, this.color)\n\t\t\tthis.registerTheme()\n\t\t}\n\n\t\tif (changedProperties.has('scheme')) {\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-scheme`, this.scheme)\n\t\t\tthis.registerTheme()\n\t\t}\n\n\t\tif (changedProperties.has('theme')) {\n\t\t\tthis.registerTheme()\n\t\t}\n\t}\n\tregisterTheme() {\n\t\t// Ensure color is a valid hex string\n\t\tconst colorHex = typeof this.color === 'string' ? this.color : '#6200ee'\n\n\t\tlet theme = formateTheme(\n\t\t\tthemeFromSourceColor(argbFromHex(colorHex)),\n\t\t\tthis.scheme === 'dark' ? true : false,\n\t\t\t{\n\t\t\t\tsuccess: argbFromHex('#34B334'),\n\t\t\t\twarning: argbFromHex('#FFA726'),\n\t\t\t\tinfo: argbFromHex('#29B6F6')\n\t\t\t}\n\t\t)\n\t\ttheme = { ...theme, ...this.theme }\n\n\t\tthis.registerThemeValues('schmancy', '', theme)\n\n\t\t// Backward compatibility: Map old variable names to new ones\n\t\tconst hostElement = this.root ? document.body : (this.shadowRoot.host as HTMLElement)\n\t\tconst getVar = (name: string) => hostElement.style.getPropertyValue(name)\n\n\t\t// Map old surface container names to new M3 names\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-low', getVar('--schmancy-sys-color-surface-containerLow'))\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-high', getVar('--schmancy-sys-color-surface-containerHigh'))\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-highest', getVar('--schmancy-sys-color-surface-containerHighest'))\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-lowest', getVar('--schmancy-sys-color-surface-containerLowest'))\n\n\t\t// Set the color-scheme CSS property on the host element\n\t\thostElement.style.colorScheme = this.scheme === 'dark' ? 'dark' : 'light'\n\t}\n\n\tregisterThemeValues(prefix = 'schmancy', path: string, value: Partial<TSchmancyTheme>): string | undefined {\n\t\t// if the value is an object\n\t\tif (typeof value === 'object') {\n\t\t\t// generate the code for each property of the object\n\t\t\treturn Object.keys(value)\n\t\t\t\t.map(key => {\n\t\t\t\t\t// if the path is empty, don't add a dash\n\t\t\t\t\treturn this.registerThemeValues(\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tpath + `${path ? '-' : ''}` + key,\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tvalue[key],\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.join('\\n')\n\t\t} else {\n\t\t\t;(this.root ? document.body : (this.shadowRoot.host as HTMLElement)).style.setProperty(\n\t\t\t\t`--${prefix}-${path}`,\n\t\t\t\tvalue,\n\t\t\t)\n\n\t\t\treturn\n\t\t}\n\t}\n\tgenerateRandomColor() {\n\t\t// Generates a random hexadecimal color code\n\t\tconst randomColor = Math.floor(Math.random() * 16777215).toString(16)\n\t\t// Pad with leading zeros if necessary to ensure 6 characters\n\t\treturn '#' + randomColor.padStart(6, '0')\n\t}\n\n\t/**\n\t * Generate a unique theme name based on DOM path\n\t */\n\tprivate generateThemeName(): string {\n\t\t// If name is provided, use it\n\t\tif (this.name) return this.name\n\n\t\t// Generate from DOM path\n\t\tconst path: string[] = []\n\t\tlet element: Element | null = this as Element\n\n\t\twhile (element && element !== document.body) {\n\t\t\tconst parent = element.parentElement\n\t\t\tif (parent) {\n\t\t\t\tconst index = Array.from(parent.children).indexOf(element)\n\t\t\t\tconst tag = element.tagName.toLowerCase()\n\t\t\t\tpath.unshift(`${tag}[${index}]`)\n\t\t\t}\n\t\t\telement = parent\n\t\t}\n\n\t\treturn path.join('>')\n\t}\n\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme': SchmancyThemeComponent\n\t}\n}\n","import { $LitElement } from '@mixins/litElement.mixin'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { debounceTime, Subject, takeUntil, tap, switchMap, of } from 'rxjs'\nimport type { SchmancyThemeComponent } from './theme.component'\n\nexport interface ColorPreset {\n\tname: string\n\tvalue: string\n\tcategory?: 'primary' | 'secondary' | 'accent'\n}\n\n// Re-export for convenience\nexport type { ColorPreset as ThemeColorPreset }\n\n/**\n * Base theme controller component providing color and scheme controls.\n * Can be used standalone without any specific UI container.\n *\n * @element schmancy-theme-controller\n *\n * @property {ColorPreset[]} customColors - Optional custom color presets\n *\n * @example\n * ```html\n * <schmancy-theme-controller></schmancy-theme-controller>\n *\n * <!-- With custom colors -->\n * <schmancy-theme-controller\n * .customColors=\"${[\n * { name: 'Brand', value: '#FF5722', category: 'primary' }\n * ]}\"\n * ></schmancy-theme-controller>\n * ```\n */\n@customElement('schmancy-theme-controller')\nexport class SchmancyThemeController extends $LitElement() {\n\t@state() protected currentScheme: 'dark' | 'light' | 'auto' = 'auto'\n\t@state() protected currentColor: string = '#6200ee'\n\t@state() protected resolvedScheme: 'dark' | 'light' = 'light'\n\t@state() private themeComponent: SchmancyThemeComponent | null = null\n\n\t@property({ type: Array }) customColors?: ColorPreset[]\n\n\tprotected colorInput$ = new Subject<string>()\n\n\tprotected get presetColors(): ColorPreset[] {\n\t\tif (this.customColors) return this.customColors\n\n\t\treturn [\n\t\t\t{ name: 'Lavender', value: '#9D8FE8', category: 'primary' },\n\t\t\t{ name: 'Rose', value: '#F48B9D', category: 'accent' },\n\t\t\t{ name: 'Mint', value: '#7ED997', category: 'accent' },\n\t\t\t{ name: 'Amber', value: '#FFC875', category: 'accent' },\n\t\t\t{ name: 'Sky', value: '#6DD5FA', category: 'primary' },\n\t\t\t{ name: 'Coral', value: '#FF9E7C', category: 'secondary' },\n\t\t\t{ name: 'Indigo', value: '#7380E8', category: 'primary' },\n\t\t\t{ name: 'Blush', value: '#FF79A8', category: 'secondary' },\n\t\t\t{ name: 'Aqua', value: '#64E0F0', category: 'accent' },\n\t\t\t{ name: 'Gold', value: '#FFE066', category: 'accent' },\n\t\t\t{ name: 'Slate', value: '#6B7E91', category: 'primary' },\n\t\t\t{ name: 'Onyx', value: '#3D4451', category: 'primary' },\n\t\t\t{ name: 'Plum', value: '#8E6BA8', category: 'secondary' },\n\t\t\t{ name: 'Forest', value: '#5A7A5F', category: 'accent' },\n\t\t\t{ name: 'Navy', value: '#3D5A80', category: 'primary' },\n\t\t\t{ name: 'Burgundy', value: '#994F5E', category: 'accent' },\n\t\t]\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Discover the nearest theme component\n\t\tthis.discover<SchmancyThemeComponent>('schmancy-theme').pipe(\n\t\t\tswitchMap(theme => {\n\t\t\t\tif (theme) {\n\t\t\t\t\tthis.themeComponent = theme\n\t\t\t\t\t// Set initial values from discovered theme\n\t\t\t\t\tthis.currentScheme = theme.scheme\n\t\t\t\t\tthis.currentColor = theme.color\n\n\t\t\t\t\t// Watch for theme property changes\n\t\t\t\t\treturn new Subject().pipe(\n\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\tif (this.themeComponent) {\n\t\t\t\t\t\t\t\tthis.currentScheme = this.themeComponent.scheme\n\t\t\t\t\t\t\t\tthis.currentColor = this.themeComponent.color\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn of(null)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\t// Debounced color input\n\t\tthis.colorInput$.pipe(\n\t\t\tdebounceTime(150),\n\t\t\ttap(color => {\n\t\t\t\tif (this.themeComponent) {\n\t\t\t\t\tthis.themeComponent.color = color\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprotected setScheme(scheme: 'dark' | 'light' | 'auto') {\n\t\tif (this.themeComponent) {\n\t\t\tthis.themeComponent.scheme = scheme\n\t\t\tthis.currentScheme = scheme\n\t\t}\n\t}\n\n\tprotected setColor(color: string) {\n\t\tif (this.themeComponent) {\n\t\t\tthis.themeComponent.color = color\n\t\t\tthis.currentColor = color\n\t\t}\n\t}\n\n\tprotected handleColorInput(e: Event) {\n\t\tconst input = e.target as HTMLInputElement\n\t\tthis.colorInput$.next(input.value)\n\t}\n\n\tprotected randomColor() {\n\t\tconst random = this.presetColors[Math.floor(Math.random() * this.presetColors.length)]\n\t\tthis.setColor(random.value)\n\t}\n\n\tprotected triggerColorPicker() {\n\t\tconst input = this.renderRoot.querySelector('input[type=\"color\"]') as HTMLInputElement\n\t\tinput?.click()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"space-y-4\">\n\t\t\t\t<!-- Color Display -->\n\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"w-16 h-16 rounded-xl border-2 border-outline cursor-pointer transition-transform hover:scale-105 active:scale-95\"\n\t\t\t\t\t\tstyle=\"background: ${this.currentColor}\"\n\t\t\t\t\t\t@click=\"${this.triggerColorPicker}\"\n\t\t\t\t\t\ttitle=\"Click to change color\"\n\t\t\t\t\t></div>\n\t\t\t\t\t<div class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<schmancy-typography type=\"body\" class=\"font-mono opacity-60\"> ${this.currentColor} </schmancy-typography>\n\t\t\t\t\t\t<div class=\"flex gap-1 mt-2\">\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"${this.currentScheme === 'light' ? 'tonal' : 'text'}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setScheme('light')}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon>light_mode</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"${this.currentScheme === 'dark' ? 'tonal' : 'text'}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setScheme('dark')}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon>dark_mode</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"${this.currentScheme === 'auto' ? 'tonal' : 'text'}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setScheme('auto')}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon>contrast</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t<schmancy-button variant=\"text\" @click=\"${this.randomColor}\">\n\t\t\t\t\t\t\t\t<schmancy-icon>shuffle</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Palette -->\n\t\t\t\t<div class=\"flex flex-wrap gap-1.5\">\n\t\t\t\t\t${this.presetColors.map(\n\t\t\t\t\t\tcolor => html`\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"w-7 h-7 rounded-full transition-all hover:scale-110 active:scale-95 ${this.currentColor ===\n\t\t\t\t\t\t\t\tcolor.value\n\t\t\t\t\t\t\t\t\t? 'ring-2 ring-primary ring-offset-1'\n\t\t\t\t\t\t\t\t\t: ''}\"\n\t\t\t\t\t\t\t\tstyle=\"background: ${color.value}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setColor(color.value)}\"\n\t\t\t\t\t\t\t\ttitle=\"${color.name}\"\n\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Hidden Color Input -->\n\t\t\t\t<input type=\"color\" .value=\"${this.currentColor}\" @input=\"${this.handleColorInput}\" class=\"hidden\" />\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-controller': SchmancyThemeController\n\t}\n}","/**\n * Theme Audio Player Component\n *\n * A generic audio player that generates emotional sounds based on user mood and theme color.\n * Integrates with the Sound Service for playback and theme management.\n * Uses local storage for persistence via the Sound Service.\n *\n * @element schmancy-theme-audio-player\n *\n * @fires schmancy-generate-mood-audio - Dispatched when user requests audio generation\n * detail: { moodText: string, themeColor: string, scheme: 'dark' | 'light' | 'auto' }\n *\n * @example\n * ```html\n * <schmancy-theme-audio-player\n * @schmancy-generate-mood-audio=${(e) => handleGenerate(e.detail)}\n * ></schmancy-theme-audio-player>\n * ```\n */\n\nimport { $LitElement } from '@mixins/litElement.mixin'\nimport { html, css } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { debounceTime, Subject, takeUntil, tap, switchMap, of } from 'rxjs'\nimport { sound } from '../audio/sound.service'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type {\n\tAudioSequence,\n\tGenerateMoodAudioRequest,\n\tGenerateMoodAudioResponse,\n\tSoundTheme,\n\tFeeling,\n} from '@schmancy/types/mood-audio.types'\n\n/** Event detail for mood audio generation request */\nexport interface GenerateMoodAudioEventDetail extends GenerateMoodAudioRequest {}\n\n/** Custom event for requesting mood audio generation */\nexport class SchmancyGenerateMoodAudioEvent extends CustomEvent<GenerateMoodAudioEventDetail> {\n\tconstructor(detail: GenerateMoodAudioEventDetail) {\n\t\tsuper('schmancy-generate-mood-audio', {\n\t\t\tdetail,\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t})\n\t}\n}\n\n// Add to global event map\ndeclare global {\n\tinterface HTMLElementEventMap {\n\t\t'schmancy-generate-mood-audio': SchmancyGenerateMoodAudioEvent\n\t}\n}\n\n/**\n * Mood Audio Player - Generates emotional sounds based on mood and theme\n * Integrates with the Sound Service for consistent sound management\n */\n@customElement('schmancy-theme-audio-player')\nexport class SchmancyThemeAudioPlayer extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`) {\n\t/** Current theme color */\n\t@state() private currentColor: string = '#6200ee'\n\n\t/** Current color scheme */\n\t@state() private currentScheme: 'dark' | 'light' | 'auto' = 'auto'\n\n\t/** User's mood input */\n\t@state() private moodText: string = ''\n\n\t/** Loading state for AI generation */\n\t@state() private isGenerating: boolean = false\n\n\t/** Generated audio sequence */\n\t@state() private audioSequence: AudioSequence | null = null\n\n\t/** Detected mood from AI */\n\t@state() private detectedMood: string = ''\n\n\t/** Error message */\n\t@state() private error: string = ''\n\n\t/** Current volume from sound service */\n\t@state() private volume: number = 0.15\n\n\t/** Current sound theme name */\n\t@state() private currentThemeName: string = 'default'\n\n\t/** Reference to theme component */\n\tprivate themeComponent: SchmancyThemeComponent | null = null\n\n\t/** Subject for mood input changes */\n\tprivate moodInput$ = new Subject<string>()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Sync with sound service\n\t\tsound.volume$.pipe(takeUntil(this.disconnecting)).subscribe(vol => {\n\t\t\tthis.volume = vol\n\t\t})\n\n\t\tsound.themeName$.pipe(takeUntil(this.disconnecting)).subscribe(name => {\n\t\t\tthis.currentThemeName = name\n\t\t})\n\n\t\t// Sync the current theme from local storage to update UI\n\t\tsound.theme$.pipe(takeUntil(this.disconnecting)).subscribe(theme => {\n\t\t\tif (theme) {\n\t\t\t\tthis.detectedMood = theme.name.replace('AI: ', '')\n\t\t\t}\n\t\t})\n\n\t\t// Discover the nearest theme component\n\t\tthis.discover<SchmancyThemeComponent>('schmancy-theme')\n\t\t\t.pipe(\n\t\t\t\tswitchMap(theme => {\n\t\t\t\t\tif (theme) {\n\t\t\t\t\t\tthis.themeComponent = theme\n\t\t\t\t\t\tthis.currentScheme = theme.scheme\n\t\t\t\t\t\tthis.currentColor = theme.color\n\n\t\t\t\t\t\t// Create observer for theme changes\n\t\t\t\t\t\treturn new Subject().pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tif (this.themeComponent) {\n\t\t\t\t\t\t\t\t\tthis.currentScheme = this.themeComponent.scheme\n\t\t\t\t\t\t\t\t\tthis.currentColor = this.themeComponent.color\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn of(null)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Debounced mood input for AI generation\n\t\tthis.moodInput$\n\t\t\t.pipe(\n\t\t\t\tdebounceTime(500),\n\t\t\t\ttap(text => {\n\t\t\t\t\tthis.moodText = text\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/** Handle mood input change */\n\tprivate handleMoodInput(e: Event): void {\n\t\tconst input = e.target as HTMLInputElement\n\t\tthis.moodInput$.next(input.value)\n\t}\n\n\t/** Request mood audio generation - dispatches event for host app to handle */\n\tprivate requestMoodAudio(): void {\n\t\tif (!this.moodText.trim()) {\n\t\t\tthis.error = 'Please enter how you are feeling'\n\t\t\treturn\n\t\t}\n\n\t\tthis.error = ''\n\t\tthis.isGenerating = true\n\t\tthis.audioSequence = null\n\t\tthis.detectedMood = ''\n\n\t\t// Dispatch event for host app to handle the API call\n\t\tthis.dispatchEvent(\n\t\t\tnew SchmancyGenerateMoodAudioEvent({\n\t\t\t\tmoodText: this.moodText.trim(),\n\t\t\t\tthemeColor: this.currentColor,\n\t\t\t\tscheme: this.currentScheme,\n\t\t\t})\n\t\t)\n\t}\n\n\t/**\n\t * Set the response from the API call.\n\t * Called by the host app after handling the schmancy-generate-mood-audio event.\n\t */\n\tpublic setResponse(response: GenerateMoodAudioResponse): void {\n\t\tthis.isGenerating = false\n\n\t\tif (response.success && response.audioSequence) {\n\t\t\tthis.audioSequence = response.audioSequence\n\t\t\tthis.detectedMood = response.detectedMood\n\n\t\t\t// Convert AudioSequence to a SoundTheme and apply it (persists to local storage)\n\t\t\tconst soundTheme = this.audioSequenceToSoundTheme(response.audioSequence, response.detectedMood)\n\t\t\tsound.setTheme(soundTheme)\n\n\t\t\t// Play the detected mood feeling\n\t\t\tthis.playDetectedMood(response.detectedMood)\n\t\t} else {\n\t\t\tthis.error = response.error || 'Failed to generate audio'\n\t\t}\n\t}\n\n\t/**\n\t * Convert an AI-generated AudioSequence to a SoundTheme\n\t */\n\tprivate audioSequenceToSoundTheme(sequence: AudioSequence, detectedMood: string): SoundTheme {\n\t\tconst feeling = this.mapMoodToFeeling(detectedMood)\n\n\t\treturn {\n\t\t\tname: `AI: ${detectedMood}`,\n\t\t\tdescription: sequence.emotionalDescription,\n\t\t\tmasterVolume: sequence.masterVolume,\n\t\t\tfeelings: {\n\t\t\t\t[feeling]: {\n\t\t\t\t\tpuffs: sequence.puffs,\n\t\t\t\t\ttones: sequence.tones,\n\t\t\t\t\tdescription: sequence.emotionalDescription,\n\t\t\t\t},\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tsourceColor: this.currentColor,\n\t\t\t\tsourceMood: this.moodText,\n\t\t\t\tscheme: this.currentScheme,\n\t\t\t\tgeneratedAt: new Date().toISOString(),\n\t\t\t\tgeneratedBy: 'AI',\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Map a detected mood string to a Feeling type\n\t */\n\tprivate mapMoodToFeeling(mood: string): Feeling {\n\t\tconst normalizedMood = mood.toLowerCase().trim()\n\n\t\tconst directMatches: Record<string, Feeling> = {\n\t\t\tjoyful: 'joyful',\n\t\t\thappy: 'joyful',\n\t\t\tjoy: 'joyful',\n\t\t\tcontent: 'content',\n\t\t\tsatisfied: 'content',\n\t\t\texcited: 'excited',\n\t\t\tthrilled: 'excited',\n\t\t\tproud: 'proud',\n\t\t\thopeful: 'hopeful',\n\t\t\trelieved: 'relieved',\n\t\t\tgrateful: 'grateful',\n\t\t\tthankful: 'grateful',\n\t\t\tpeaceful: 'peaceful',\n\t\t\tserene: 'peaceful',\n\t\t\tplayful: 'playful',\n\t\t\tamused: 'amused',\n\t\t\tcurious: 'curious',\n\t\t\tinterested: 'curious',\n\t\t\tinspired: 'inspired',\n\t\t\tconfident: 'confident',\n\t\t\tloved: 'loved',\n\t\t\tcomforted: 'comforted',\n\t\t\tenergized: 'energized',\n\t\t\tcelebrated: 'celebrated',\n\t\t\tsad: 'sad',\n\t\t\tunhappy: 'sad',\n\t\t\tlonely: 'lonely',\n\t\t\talone: 'lonely',\n\t\t\tdisappointed: 'disappointed',\n\t\t\tmelancholic: 'melancholic',\n\t\t\tanxious: 'anxious',\n\t\t\tworried: 'worried',\n\t\t\tnervous: 'nervous',\n\t\t\tstressed: 'stressed',\n\t\t\toverwhelmed: 'overwhelmed',\n\t\t\tannoyed: 'annoyed',\n\t\t\tfrustrated: 'frustrated',\n\t\t\tangry: 'angry',\n\t\t\ttired: 'tired',\n\t\t\texhausted: 'exhausted',\n\t\t\tbored: 'bored',\n\t\t\tcalm: 'calm',\n\t\t\trelaxed: 'relaxed',\n\t\t\tconnected: 'connected',\n\t\t\tnostalgic: 'nostalgic',\n\t\t\tsurprised: 'surprised',\n\t\t\tconfused: 'confused',\n\t\t}\n\n\t\tif (directMatches[normalizedMood]) {\n\t\t\treturn directMatches[normalizedMood]\n\t\t}\n\n\t\tfor (const [keyword, feeling] of Object.entries(directMatches)) {\n\t\t\tif (normalizedMood.includes(keyword)) {\n\t\t\t\treturn feeling\n\t\t\t}\n\t\t}\n\n\t\treturn 'calm'\n\t}\n\n\t/**\n\t * Play the detected mood using the sound service\n\t */\n\tprivate playDetectedMood(mood: string): void {\n\t\tconst feeling = this.mapMoodToFeeling(mood)\n\t\tsound.play(feeling)\n\t}\n\n\t/**\n\t * Set an error state. Called by host app if API call fails.\n\t */\n\tpublic setError(message: string): void {\n\t\tthis.isGenerating = false\n\t\tthis.error = message\n\t}\n\n\t/** Replay the current audio sequence using sound service */\n\tprivate replay(): void {\n\t\tif (this.detectedMood) {\n\t\t\tthis.playDetectedMood(this.detectedMood)\n\t\t}\n\t}\n\n\t/** Handle volume change */\n\tprivate handleVolumeChange(e: Event): void {\n\t\tconst value = parseInt((e.target as HTMLInputElement).value) / 100\n\t\tsound.setVolume(value)\n\t}\n\n\t/** Reset to default sounds */\n\tprivate resetToDefaults(): void {\n\t\tsound.resetTheme()\n\t\tthis.audioSequence = null\n\t\tthis.detectedMood = ''\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"space-y-4\">\n\t\t\t\t<!-- Current Theme Status -->\n\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t<schmancy-typography type=\"label\" token=\"sm\" class=\"opacity-60\">\n\t\t\t\t\t\tSound Theme: ${this.currentThemeName}\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.currentThemeName !== 'default',\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-button variant=\"text\" size=\"sm\" @click=${() => this.resetToDefaults()}>\n\t\t\t\t\t\t\t\t<schmancy-icon size=\"16px\">refresh</schmancy-icon>\n\t\t\t\t\t\t\t\tReset\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Mood Input -->\n\t\t\t\t<div class=\"space-y-2\">\n\t\t\t\t\t<schmancy-typography type=\"label\" token=\"lg\" class=\"text-surface-on\">\n\t\t\t\t\t\tHow are you feeling today?\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tplaceholder=\"I'm feeling...\"\n\t\t\t\t\t\t.value=${this.moodText}\n\t\t\t\t\t\t@input=${this.handleMoodInput}\n\t\t\t\t\t\t?disabled=${this.isGenerating}\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t></schmancy-input>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Current Color Preview -->\n\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t<div class=\"w-10 h-10 rounded-lg border border-outline\" style=\"background: ${this.currentColor}\"></div>\n\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"opacity-60\"> Current theme color </schmancy-typography>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Generate Button -->\n\t\t\t\t<schmancy-button\n\t\t\t\t\tvariant=\"filled\"\n\t\t\t\t\t@click=${() => this.requestMoodAudio()}\n\t\t\t\t\t?disabled=${this.isGenerating || !this.moodText.trim()}\n\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t>\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.isGenerating,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-progress-circular indeterminate size=\"20\"></schmancy-progress-circular>\n\t\t\t\t\t\t\t<span class=\"ml-2\">Generating...</span>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-icon>music_note</schmancy-icon>\n\t\t\t\t\t\t\t<span class=\"ml-2\">Generate Mood Sound</span>\n\t\t\t\t\t\t`\n\t\t\t\t\t)}\n\t\t\t\t</schmancy-button>\n\n\t\t\t\t<!-- Error Message -->\n\t\t\t\t${when(\n\t\t\t\t\tthis.error,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<schmancy-surface type=\"error\" class=\"p-3 rounded-lg\">\n\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"text-error\"> ${this.error} </schmancy-typography>\n\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t`\n\t\t\t\t)}\n\n\t\t\t\t<!-- Generated Audio Info -->\n\t\t\t\t${when(\n\t\t\t\t\tthis.audioSequence,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<schmancy-surface type=\"containerLow\" rounded=\"all\" class=\"p-4 space-y-3\">\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"lg\"> ${this.detectedMood} </schmancy-typography>\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"opacity-70\">\n\t\t\t\t\t\t\t\t\t\t${this.audioSequence?.emotionalDescription}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<schmancy-button variant=\"tonal\" @click=${() => this.replay()}>\n\t\t\t\t\t\t\t\t\t<schmancy-icon>replay</schmancy-icon>\n\t\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Audio Visualization -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-1 h-8\">\n\t\t\t\t\t\t\t\t${this.audioSequence?.puffs.map(\n\t\t\t\t\t\t\t\t\t(_, i) => html`\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-2 bg-primary rounded-full animate-pulse\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"height: ${20 + i * 8}px; animation-delay: ${i * 0.1}s\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${this.audioSequence?.tones.map(\n\t\t\t\t\t\t\t\t\tt => html`\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-1 bg-secondary rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"height: ${Math.min(32, t.frequency / 40)}px; opacity: ${0.5 + t.volume * 0.5}\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Volume Control -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t<schmancy-icon class=\"opacity-50\">volume_down</schmancy-icon>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\t\t\t\tmin=\"0\"\n\t\t\t\t\t\t\t\t\tmax=\"100\"\n\t\t\t\t\t\t\t\t\t.value=${String(this.volume * 100)}\n\t\t\t\t\t\t\t\t\t@input=${this.handleVolumeChange}\n\t\t\t\t\t\t\t\t\tclass=\"flex-1 h-1 bg-surface-containerHighest rounded-full appearance-none cursor-pointer\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<schmancy-icon class=\"opacity-50\">volume_up</schmancy-icon>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t`\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-audio-player': SchmancyThemeAudioPlayer\n\t}\n}\n","import { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport { SchmancyThemeController } from './theme-controller'\nimport './theme-audio-player'\n\n/**\n * BOAT UX theme controller - Wraps the base theme controller in a schmancy-boat component.\n * Provides a floating, draggable container for theme controls.\n *\n * @element schmancy-theme-controller-boat\n *\n * @extends SchmancyThemeController\n *\n * @example\n * ```html\n * <schmancy-theme-controller-boat></schmancy-theme-controller-boat>\n *\n * <!-- With custom colors -->\n * <schmancy-theme-controller-boat\n * .customColors=\"${[\n * { name: 'Brand', value: '#FF5722', category: 'primary' }\n * ]}\"\n * ></schmancy-theme-controller-boat>\n * ```\n */\n@customElement('schmancy-theme-controller-boat')\nexport class SchmancyThemeControllerBoat extends SchmancyThemeController {\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-boat id=\"schmancy-theme-component\">\n\t\t\t\t<schmancy-icon slot=\"header\">palette</schmancy-icon>\n\n\t\t\t\t<div class=\"p-4 space-y-6\">\n\t\t\t\t\t${super.render()}\n\n\t\t\t\t\t<!-- Audio Player Section -->\n\t\t\t\t\t<schmancy-divider></schmancy-divider>\n\t\t\t\t\t<schmancy-theme-audio-player></schmancy-theme-audio-player>\n\t\t\t\t</div>\n\t\t\t</schmancy-boat>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-controller-boat': SchmancyThemeControllerBoat\n\t}\n}"],"names":["signum","num","lerp","start","stop","amount","clampDouble","min","max","input","sanitizeDegreesDouble","degrees","matrixMultiply","row","matrix","SRGB_TO_XYZ","XYZ_TO_SRGB","WHITE_POINT_D65","argbFromRgb","red","green","blue","argbFromLinrgb","linrgb","delinearized","redFromArgb","argb","greenFromArgb","blueFromArgb","lstarFromArgb","y","mathUtils.matrixMultiply","linearized","labF","yFromLstar","lstar","ft","e","kappa","ft3","lstarFromY","rgbComponent","normalized","Math","pow","round","t","ViewingConditions","whitePoint","utils.whitePointD65","adaptingLuminance","PI","utils.yFromLstar","backgroundLstar","surround","discountingIlluminant","xyz","rW","gW","bW","f","c","math.lerp","d","exp","nc","rgbD","k","k4","k4F","fl","cbrt","n","z","sqrt","nbb","ncb","rgbAFactors","rgbA","aw","fLRoot","this","DEFAULT","make","Cam16","hue","chroma","j","q","m","s","jstar","astar","bstar","other","dJ","dA","dB","dEPrime","fromIntInViewingConditions","viewingConditions","redL","utils.linearized","greenL","blueL","x","rC","gC","bC","rD","gD","bD","rAF","abs","gAF","bAF","rA","math.signum","gA","bA","a","b","u","p2","atanDegrees","atan2","hueRadians","ac","huePrime","cos","alpha","mstar","log","sin","h","fromJchInViewingConditions","fromUcsInViewingConditions","toInt","viewed","hRad","eHue","p1","hSin","hCos","gamma","rCBase","gCBase","bCBase","rF","gF","bF","linearR","linearG","linearB","J","Q","C","M","HctSolver","angle","component","af","mathUtils.signum","scaledDiscount","SCALED_DISCOUNT_FROM_LINRGB","chromaticAdaptation","sanitizeRadians","source","mid","target","coordinate","axis","intercept","lerpPoint","kR","Y_FROM_LINRGB","kG","kB","coordA","coordB","g","r","isBounded","targetHue","left","right","leftHue","rightHue","initialized","uncut","nthVertex","midHue","hueOf","areInCyclicOrder","floor","ceil","segment","bisectToSegment","lPlane","rPlane","criticalPlaneBelow","trueDelinearized","criticalPlaneAbove","i","mPlane","midPlaneCoordinate","CRITICAL_PLANES","setCoordinate","midpoint","adapted","adaptedAbs","base","tInnerCoeff","iterationRound","jNormalized","inverseChromaticAdaptation","LINRGB_FROM_SCALED_DISCOUNT","fnj","colorUtils.argbFromLinrgb","hueDegrees","mathUtils.sanitizeDegreesDouble","colorUtils.yFromLstar","exactAnswer","findResultByJ","bisectToLimit","fromInt","solveToInt","Hct","tone","internalHue","newHue","setInternalState","internalChroma","internalTone","newChroma","newTone","cam","utils.lstarFromArgb","vc","viewedInVc","xyzInViewingConditions","recastInVc","fromXyzInViewingConditions","from","utils.lstarFromY","Blend","designColor","sourceColor","fromHct","toHct","differenceDegrees","rotationDegrees","outputHue","to","ucs","cam16Ucs","ucsCam","fromCam","colorUtils.lstarFromArgb","toCam","fromJ","fromA","fromB","fromUcs","Contrast","toneA","toneB","math.clampDouble","ratioOfYs","y1","y2","lighter","ratio","darkY","lightY","realContrast","delta","returnValue","lighterSafe","darkerSafe","darker","DislikeAnalyzer","hct","huePasses","chromaPasses","tonePasses","isDisliked","DynamicColor","args","name","palette","isBackground","background","secondBackground","contrastCurve","toneDeltaPair","hctCache","Map","Error","scheme","getHct","cachedAnswer","get","getTone","answer","size","clear","set","decreasingContrast","contrastLevel","roleA","roleB","polarity","stayTogether","bgTone","aIsNearer","isDark","nearer","farther","amNearer","expansionDir","nContrast","fContrast","nInitialTone","nTone","ratioOfTones","foregroundTone","fInitialTone","fTone","desiredRatio","bg1","bg2","bgTone1","bgTone2","upper","lower","lightOption","darkOption","availables","push","tonePrefersLightForeground","length","lighterTone","lighterUnsafe","darkerTone","darkerUnsafe","lighterRatio","darkerRatio","negligibleDifference","toneAllowsLightForeground","TonalPalette","keyColor","KeyColor","create","cache","requestedChroma","chromaCache","maxChromaValue","lowerTone","upperTone","midTone","isAscending","maxChroma","has","ContrastCurve","low","normal","medium","high","ToneDeltaPair","Variant","isFidelity","variant","FIDELITY","CONTENT","isMonochrome","MONOCHROME","MaterialDynamicColors","surfaceBright","surfaceDim","contentAccentToneDelta","primaryPaletteKeyColor","fromPalette","primaryPalette","secondaryPaletteKeyColor","secondaryPalette","tertiaryPaletteKeyColor","tertiaryPalette","neutralPaletteKeyColor","neutralPalette","neutralVariantPaletteKeyColor","neutralVariantPalette","onBackground","surface","surfaceContainerLowest","surfaceContainerLow","surfaceContainer","surfaceContainerHigh","surfaceContainerHighest","onSurface","highestSurface","surfaceVariant","onSurfaceVariant","inverseSurface","inverseOnSurface","outline","outlineVariant","shadow","scrim","surfaceTint","primary","primaryContainer","onPrimary","sourceColorHct","onPrimaryContainer","inversePrimary","secondary","secondaryContainer","onSecondary","initialTone","byDecreasingTone","closestToChroma","chromaPeak","potentialSolution","onSecondaryContainer","tertiary","tertiaryContainer","onTertiary","proposedHct","fixIfDisliked","onTertiaryContainer","error","errorPalette","errorContainer","onError","onErrorContainer","primaryFixed","primaryFixedDim","onPrimaryFixed","onPrimaryFixedVariant","secondaryFixed","secondaryFixedDim","onSecondaryFixed","onSecondaryFixedVariant","tertiaryFixed","tertiaryFixedDim","onTertiaryFixed","onTertiaryFixedVariant","CorePalette","colors","createPaletteFromColors","content","p","a2","a1","a3","neutral","n1","neutralVariant","n2","isContent","fromHueAndChroma","Scheme","props","lightFromCorePalette","of","darkFromCorePalette","contentOf","core","toJSON","argbFromHex","hex","isThree","replace","isSix","isEight","parseIntHex","slice","repeat","value","parseInt","themeFromSourceColor","customColors","schemes","light","dark","palettes","map","color","blend","harmonize","tones","onColor","colorContainer","onColorContainer","argbToHex","colorUtils.redFromArgb","colorUtils.greenFromArgb","colorUtils.blueFromArgb","outParts","toString","part","entries","join","createTonalPalette","formateTheme","originalTheme","extendedColors","successPalette","success","warningPalette","warning","infoPalette","info","sys","default","dim","bright","container","containerLow","containerLowest","containerHigh","containerHighest","on","onVariant","tint","inverse","inverseOn","highest","lowest","onContainer","fixed","fixedDim","onFixed","onFixedVariant","typography","display","large","small","headline","title","body","label","shape","corner","none","extraSmall","extraLarge","full","elevation","motion","easing","emphasized","emphasizedDecelerate","emphasizedAccelerate","standard","standardDecelerate","standardAccelerate","legacy","linear","duration","short1","short2","short3","short4","medium1","medium2","medium3","medium4","long1","long2","long3","long4","extraLong1","extraLong2","extraLong3","extraLong4","state","opacity","hover","focus","pressed","dragged","disabled","disabledContainer","spacing","ref","createLightTonalPaletteFromBaseColor","tonalPalette","cLowest","cLow","cHigh","cHighest","sDim","sBright","createDarkTonalPaletteFromBaseColor","ThemeContext","createContext","ThemeService","constructor","_theme$","BehaviorSubject","_themeComponent$","_fullscreen$","scheme$","$","pipe","settings","distinctUntilChanged","shareReplay","color$","theme$","asObservable","JSON","stringify","themeComponent$","fullscreen$","resolvedScheme$","switchMap","mediaQuery","window","matchMedia","Observable","subscriber","handler","next","matches","addEventListener","removeEventListener","discoverTheme","theme","getValue","themeComponent","fullscreen","fromEvent","ThemeHereIAm","takeUntil","timer","detail","defaultIfEmpty","tap","registerThemeComponent","dispatchEvent","CustomEvent","ThemeWhereAreYou","bubbles","composed","values","updates","Object","keys","isDarkMode","toggleScheme","currentScheme","newScheme","setScheme","variableName","host","root","document","shadowRoot","getComputedStyle","getPropertyValue","trim","getCSSVariable","setFullscreen","setColor","getInstance","instance","schmancyTheme","themeContext","tailwindStyles","unsafeCSS","$colorScheme","initialColorScheme","subscription","subscribe","newColorScheme","unsubscribe","SchmancyThemeComponent","$LitElement","super","arguments","connectedCallback","themeName","generateThemeName","storedColor","sessionStorage","getItem","storedScheme","generateRandomColor","setItem","hasAttribute","disconnecting","registerTheme","stopPropagation","preventDefault","changedProperties","updated","registerThemeValues","hostElement","getVar","style","setProperty","colorScheme","prefix","path","key","random","padStart","element","parent","parentElement","index","Array","children","indexOf","tag","tagName","toLowerCase","unshift","html","__decorateClass","property","type","String","reflect","prototype","Boolean","provide","context","customElement","SchmancyThemeController","currentColor","resolvedScheme","colorInput$","Subject","presetColors","category","discover","debounceTime","triggerColorPicker","renderRoot","querySelector","click","render","randomColor","handleColorInput","SchmancyGenerateMoodAudioEvent","SchmancyThemeAudioPlayer","css","moodText","isGenerating","audioSequence","detectedMood","volume","currentThemeName","moodInput$","sound","volume$","vol","themeName$","text","requestMoodAudio","themeColor","response","soundTheme","audioSequenceToSoundTheme","setTheme","playDetectedMood","sequence","feeling","mapMoodToFeeling","description","emotionalDescription","masterVolume","feelings","puffs","metadata","sourceMood","generatedAt","Date","toISOString","generatedBy","mood","normalizedMood","directMatches","joyful","happy","joy","satisfied","excited","thrilled","proud","hopeful","relieved","grateful","thankful","peaceful","serene","playful","amused","curious","interested","inspired","confident","loved","comforted","energized","celebrated","sad","unhappy","lonely","alone","disappointed","melancholic","anxious","worried","nervous","stressed","overwhelmed","annoyed","frustrated","angry","tired","exhausted","bored","calm","relaxed","connected","nostalgic","surprised","confused","keyword","includes","play","message","replay","setVolume","resetTheme","when","resetToDefaults","handleMoodInput","_","frequency","handleVolumeChange","SchmancyThemeControllerBoat"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}
1
+ {"version":3,"file":"theme-controller-boat-CzSmjyKq.js","sources":["../node_modules/@material/material-color-utilities/utils/math_utils.js","../node_modules/@material/material-color-utilities/utils/color_utils.js","../node_modules/@material/material-color-utilities/hct/viewing_conditions.js","../node_modules/@material/material-color-utilities/hct/cam16.js","../node_modules/@material/material-color-utilities/hct/hct_solver.js","../node_modules/@material/material-color-utilities/hct/hct.js","../node_modules/@material/material-color-utilities/blend/blend.js","../node_modules/@material/material-color-utilities/contrast/contrast.js","../node_modules/@material/material-color-utilities/dislike/dislike_analyzer.js","../node_modules/@material/material-color-utilities/dynamiccolor/dynamic_color.js","../node_modules/@material/material-color-utilities/palettes/tonal_palette.js","../node_modules/@material/material-color-utilities/dynamiccolor/contrast_curve.js","../node_modules/@material/material-color-utilities/dynamiccolor/tone_delta_pair.js","../node_modules/@material/material-color-utilities/dynamiccolor/variant.js","../node_modules/@material/material-color-utilities/dynamiccolor/material_dynamic_colors.js","../node_modules/@material/material-color-utilities/palettes/core_palette.js","../node_modules/@material/material-color-utilities/scheme/scheme.js","../node_modules/@material/material-color-utilities/utils/string_utils.js","../node_modules/@material/material-color-utilities/utils/theme_utils.js","../src/theme/theme.format.ts","../src/theme/theme.service.ts","../src/theme/context.ts","../src/theme/theme.component.ts","../src/theme/theme-controller.ts","../src/theme/theme-audio-player.ts","../src/theme/theme-controller-boat.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\n/**\n * Utility methods for mathematical operations.\n */\n/**\n * The signum function.\n *\n * @return 1 if num > 0, -1 if num < 0, and 0 if num = 0\n */\nexport function signum(num) {\n if (num < 0) {\n return -1;\n }\n else if (num === 0) {\n return 0;\n }\n else {\n return 1;\n }\n}\n/**\n * The linear interpolation function.\n *\n * @return start if amount = 0 and stop if amount = 1\n */\nexport function lerp(start, stop, amount) {\n return (1.0 - amount) * start + amount * stop;\n}\n/**\n * Clamps an integer between two integers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampInt(min, max, input) {\n if (input < min) {\n return min;\n }\n else if (input > max) {\n return max;\n }\n return input;\n}\n/**\n * Clamps an integer between two floating-point numbers.\n *\n * @return input when min <= input <= max, and either min or max\n * otherwise.\n */\nexport function clampDouble(min, max, input) {\n if (input < min) {\n return min;\n }\n else if (input > max) {\n return max;\n }\n return input;\n}\n/**\n * Sanitizes a degree measure as an integer.\n *\n * @return a degree measure between 0 (inclusive) and 360\n * (exclusive).\n */\nexport function sanitizeDegreesInt(degrees) {\n degrees = degrees % 360;\n if (degrees < 0) {\n degrees = degrees + 360;\n }\n return degrees;\n}\n/**\n * Sanitizes a degree measure as a floating-point number.\n *\n * @return a degree measure between 0.0 (inclusive) and 360.0\n * (exclusive).\n */\nexport function sanitizeDegreesDouble(degrees) {\n degrees = degrees % 360.0;\n if (degrees < 0) {\n degrees = degrees + 360.0;\n }\n return degrees;\n}\n/**\n * Sign of direction change needed to travel from one angle to\n * another.\n *\n * For angles that are 180 degrees apart from each other, both\n * directions have the same travel distance, so either direction is\n * shortest. The value 1.0 is returned in this case.\n *\n * @param from The angle travel starts from, in degrees.\n * @param to The angle travel ends at, in degrees.\n * @return -1 if decreasing from leads to the shortest travel\n * distance, 1 if increasing from leads to the shortest travel\n * distance.\n */\nexport function rotationDirection(from, to) {\n const increasingDifference = sanitizeDegreesDouble(to - from);\n return increasingDifference <= 180.0 ? 1.0 : -1.0;\n}\n/**\n * Distance of two points on a circle, represented using degrees.\n */\nexport function differenceDegrees(a, b) {\n return 180.0 - Math.abs(Math.abs(a - b) - 180.0);\n}\n/**\n * Multiplies a 1x3 row vector with a 3x3 matrix.\n */\nexport function matrixMultiply(row, matrix) {\n const a = row[0] * matrix[0][0] + row[1] * matrix[0][1] + row[2] * matrix[0][2];\n const b = row[0] * matrix[1][0] + row[1] * matrix[1][1] + row[2] * matrix[1][2];\n const c = row[0] * matrix[2][0] + row[1] * matrix[2][1] + row[2] * matrix[2][2];\n return [a, b, c];\n}\n//# sourceMappingURL=math_utils.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport * as mathUtils from './math_utils.js';\n/**\n * Color science utilities.\n *\n * Utility methods for color science constants and color space\n * conversions that aren't HCT or CAM16.\n */\nconst SRGB_TO_XYZ = [\n [0.41233895, 0.35762064, 0.18051042],\n [0.2126, 0.7152, 0.0722],\n [0.01932141, 0.11916382, 0.95034478],\n];\nconst XYZ_TO_SRGB = [\n [\n 3.2413774792388685,\n -1.5376652402851851,\n -0.49885366846268053,\n ],\n [\n -0.9691452513005321,\n 1.8758853451067872,\n 0.04156585616912061,\n ],\n [\n 0.05562093689691305,\n -0.20395524564742123,\n 1.0571799111220335,\n ],\n];\nconst WHITE_POINT_D65 = [95.047, 100.0, 108.883];\n/**\n * Converts a color from RGB components to ARGB format.\n */\nexport function argbFromRgb(red, green, blue) {\n return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>>\n 0;\n}\n/**\n * Converts a color from linear RGB components to ARGB format.\n */\nexport function argbFromLinrgb(linrgb) {\n const r = delinearized(linrgb[0]);\n const g = delinearized(linrgb[1]);\n const b = delinearized(linrgb[2]);\n return argbFromRgb(r, g, b);\n}\n/**\n * Returns the alpha component of a color in ARGB format.\n */\nexport function alphaFromArgb(argb) {\n return argb >> 24 & 255;\n}\n/**\n * Returns the red component of a color in ARGB format.\n */\nexport function redFromArgb(argb) {\n return argb >> 16 & 255;\n}\n/**\n * Returns the green component of a color in ARGB format.\n */\nexport function greenFromArgb(argb) {\n return argb >> 8 & 255;\n}\n/**\n * Returns the blue component of a color in ARGB format.\n */\nexport function blueFromArgb(argb) {\n return argb & 255;\n}\n/**\n * Returns whether a color in ARGB format is opaque.\n */\nexport function isOpaque(argb) {\n return alphaFromArgb(argb) >= 255;\n}\n/**\n * Converts a color from ARGB to XYZ.\n */\nexport function argbFromXyz(x, y, z) {\n const matrix = XYZ_TO_SRGB;\n const linearR = matrix[0][0] * x + matrix[0][1] * y + matrix[0][2] * z;\n const linearG = matrix[1][0] * x + matrix[1][1] * y + matrix[1][2] * z;\n const linearB = matrix[2][0] * x + matrix[2][1] * y + matrix[2][2] * z;\n const r = delinearized(linearR);\n const g = delinearized(linearG);\n const b = delinearized(linearB);\n return argbFromRgb(r, g, b);\n}\n/**\n * Converts a color from XYZ to ARGB.\n */\nexport function xyzFromArgb(argb) {\n const r = linearized(redFromArgb(argb));\n const g = linearized(greenFromArgb(argb));\n const b = linearized(blueFromArgb(argb));\n return mathUtils.matrixMultiply([r, g, b], SRGB_TO_XYZ);\n}\n/**\n * Converts a color represented in Lab color space into an ARGB\n * integer.\n */\nexport function argbFromLab(l, a, b) {\n const whitePoint = WHITE_POINT_D65;\n const fy = (l + 16.0) / 116.0;\n const fx = a / 500.0 + fy;\n const fz = fy - b / 200.0;\n const xNormalized = labInvf(fx);\n const yNormalized = labInvf(fy);\n const zNormalized = labInvf(fz);\n const x = xNormalized * whitePoint[0];\n const y = yNormalized * whitePoint[1];\n const z = zNormalized * whitePoint[2];\n return argbFromXyz(x, y, z);\n}\n/**\n * Converts a color from ARGB representation to L*a*b*\n * representation.\n *\n * @param argb the ARGB representation of a color\n * @return a Lab object representing the color\n */\nexport function labFromArgb(argb) {\n const linearR = linearized(redFromArgb(argb));\n const linearG = linearized(greenFromArgb(argb));\n const linearB = linearized(blueFromArgb(argb));\n const matrix = SRGB_TO_XYZ;\n const x = matrix[0][0] * linearR + matrix[0][1] * linearG + matrix[0][2] * linearB;\n const y = matrix[1][0] * linearR + matrix[1][1] * linearG + matrix[1][2] * linearB;\n const z = matrix[2][0] * linearR + matrix[2][1] * linearG + matrix[2][2] * linearB;\n const whitePoint = WHITE_POINT_D65;\n const xNormalized = x / whitePoint[0];\n const yNormalized = y / whitePoint[1];\n const zNormalized = z / whitePoint[2];\n const fx = labF(xNormalized);\n const fy = labF(yNormalized);\n const fz = labF(zNormalized);\n const l = 116.0 * fy - 16;\n const a = 500.0 * (fx - fy);\n const b = 200.0 * (fy - fz);\n return [l, a, b];\n}\n/**\n * Converts an L* value to an ARGB representation.\n *\n * @param lstar L* in L*a*b*\n * @return ARGB representation of grayscale color with lightness\n * matching L*\n */\nexport function argbFromLstar(lstar) {\n const y = yFromLstar(lstar);\n const component = delinearized(y);\n return argbFromRgb(component, component, component);\n}\n/**\n * Computes the L* value of a color in ARGB representation.\n *\n * @param argb ARGB representation of a color\n * @return L*, from L*a*b*, coordinate of the color\n */\nexport function lstarFromArgb(argb) {\n const y = xyzFromArgb(argb)[1];\n return 116.0 * labF(y / 100.0) - 16.0;\n}\n/**\n * Converts an L* value to a Y value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param lstar L* in L*a*b*\n * @return Y in XYZ\n */\nexport function yFromLstar(lstar) {\n return 100.0 * labInvf((lstar + 16.0) / 116.0);\n}\n/**\n * Converts a Y value to an L* value.\n *\n * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.\n *\n * L* measures perceptual luminance, a linear scale. Y in XYZ\n * measures relative luminance, a logarithmic scale.\n *\n * @param y Y in XYZ\n * @return L* in L*a*b*\n */\nexport function lstarFromY(y) {\n return labF(y / 100.0) * 116.0 - 16.0;\n}\n/**\n * Linearizes an RGB component.\n *\n * @param rgbComponent 0 <= rgb_component <= 255, represents R/G/B\n * channel\n * @return 0.0 <= output <= 100.0, color channel converted to\n * linear RGB space\n */\nexport function linearized(rgbComponent) {\n const normalized = rgbComponent / 255.0;\n if (normalized <= 0.040449936) {\n return normalized / 12.92 * 100.0;\n }\n else {\n return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100.0;\n }\n}\n/**\n * Delinearizes an RGB component.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0 <= output <= 255, color channel converted to regular\n * RGB space\n */\nexport function delinearized(rgbComponent) {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n }\n else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return mathUtils.clampInt(0, 255, Math.round(delinearized * 255.0));\n}\n/**\n * Returns the standard white point; white on a sunny day.\n *\n * @return The white point\n */\nexport function whitePointD65() {\n return WHITE_POINT_D65;\n}\n/**\n * Return RGBA from a given int32 color\n *\n * @param argb ARGB representation of a int32 color.\n * @return RGBA representation of a int32 color.\n */\nexport function rgbaFromArgb(argb) {\n const r = redFromArgb(argb);\n const g = greenFromArgb(argb);\n const b = blueFromArgb(argb);\n const a = alphaFromArgb(argb);\n return { r, g, b, a };\n}\n/**\n * Return int32 color from a given RGBA component\n *\n * @param rgba RGBA representation of a int32 color.\n * @returns ARGB representation of a int32 color.\n */\nexport function argbFromRgba({ r, g, b, a }) {\n const rValue = clampComponent(r);\n const gValue = clampComponent(g);\n const bValue = clampComponent(b);\n const aValue = clampComponent(a);\n return (aValue << 24) | (rValue << 16) | (gValue << 8) | bValue;\n}\nfunction clampComponent(value) {\n if (value < 0)\n return 0;\n if (value > 255)\n return 255;\n return value;\n}\nfunction labF(t) {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n if (t > e) {\n return Math.pow(t, 1.0 / 3.0);\n }\n else {\n return (kappa * t + 16) / 116;\n }\n}\nfunction labInvf(ft) {\n const e = 216.0 / 24389.0;\n const kappa = 24389.0 / 27.0;\n const ft3 = ft * ft * ft;\n if (ft3 > e) {\n return ft3;\n }\n else {\n return (116 * ft - 16) / kappa;\n }\n}\n//# sourceMappingURL=color_utils.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n/**\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n *\n * This class caches intermediate values of the CAM16 conversion process that\n * depend only on viewing conditions, enabling speed ups.\n */\nexport class ViewingConditions {\n /**\n * Create ViewingConditions from a simple, physically relevant, set of\n * parameters.\n *\n * @param whitePoint White point, measured in the XYZ color space.\n * default = D65, or sunny day afternoon\n * @param adaptingLuminance The luminance of the adapting field. Informally,\n * how bright it is in the room where the color is viewed. Can be\n * calculated from lux by multiplying lux by 0.0586. default = 11.72,\n * or 200 lux.\n * @param backgroundLstar The lightness of the area surrounding the color.\n * measured by L* in L*a*b*. default = 50.0\n * @param surround A general description of the lighting surrounding the\n * color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a\n * dimly light room, like watching TV at home at night. 2.0 means there\n * is no difference between the lighting on the color and around it.\n * default = 2.0\n * @param discountingIlluminant Whether the eye accounts for the tint of the\n * ambient lighting, such as knowing an apple is still red in green light.\n * default = false, the eye does not perform this process on\n * self-luminous objects like displays.\n */\n static make(whitePoint = utils.whitePointD65(), adaptingLuminance = (200.0 / Math.PI) * utils.yFromLstar(50.0) / 100.0, backgroundLstar = 50.0, surround = 2.0, discountingIlluminant = false) {\n const xyz = whitePoint;\n const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;\n const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;\n const bW = xyz[0] * -0.002079 + xyz[1] * 0.048952 + xyz[2] * 0.953127;\n const f = 0.8 + surround / 10.0;\n const c = f >= 0.9 ? math.lerp(0.59, 0.69, (f - 0.9) * 10.0) :\n math.lerp(0.525, 0.59, (f - 0.8) * 10.0);\n let d = discountingIlluminant ?\n 1.0 :\n f * (1.0 - (1.0 / 3.6) * Math.exp((-adaptingLuminance - 42.0) / 92.0));\n d = d > 1.0 ? 1.0 : d < 0.0 ? 0.0 : d;\n const nc = f;\n const rgbD = [\n d * (100.0 / rW) + 1.0 - d,\n d * (100.0 / gW) + 1.0 - d,\n d * (100.0 / bW) + 1.0 - d,\n ];\n const k = 1.0 / (5.0 * adaptingLuminance + 1.0);\n const k4 = k * k * k * k;\n const k4F = 1.0 - k4;\n const fl = k4 * adaptingLuminance +\n 0.1 * k4F * k4F * Math.cbrt(5.0 * adaptingLuminance);\n const n = utils.yFromLstar(backgroundLstar) / whitePoint[1];\n const z = 1.48 + Math.sqrt(n);\n const nbb = 0.725 / Math.pow(n, 0.2);\n const ncb = nbb;\n const rgbAFactors = [\n Math.pow((fl * rgbD[0] * rW) / 100.0, 0.42),\n Math.pow((fl * rgbD[1] * gW) / 100.0, 0.42),\n Math.pow((fl * rgbD[2] * bW) / 100.0, 0.42),\n ];\n const rgbA = [\n (400.0 * rgbAFactors[0]) / (rgbAFactors[0] + 27.13),\n (400.0 * rgbAFactors[1]) / (rgbAFactors[1] + 27.13),\n (400.0 * rgbAFactors[2]) / (rgbAFactors[2] + 27.13),\n ];\n const aw = (2.0 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;\n return new ViewingConditions(n, aw, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, 0.25), z);\n }\n /**\n * Parameters are intermediate values of the CAM16 conversion process. Their\n * names are shorthand for technical color science terminology, this class\n * would not benefit from documenting them individually. A brief overview\n * is available in the CAM16 specification, and a complete overview requires\n * a color science textbook, such as Fairchild's Color Appearance Models.\n */\n constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {\n this.n = n;\n this.aw = aw;\n this.nbb = nbb;\n this.ncb = ncb;\n this.c = c;\n this.nc = nc;\n this.rgbD = rgbD;\n this.fl = fl;\n this.fLRoot = fLRoot;\n this.z = z;\n }\n}\n/** sRGB-like viewing conditions. */\nViewingConditions.DEFAULT = ViewingConditions.make();\n//# sourceMappingURL=viewing_conditions.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\nimport { ViewingConditions } from './viewing_conditions.js';\n/**\n * CAM16, a color appearance model. Colors are not just defined by their hex\n * code, but rather, a hex code and viewing conditions.\n *\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*, a*,\n * b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and should be used when measuring distances between colors.\n *\n * In traditional color spaces, a color can be identified solely by the\n * observer's measurement of the color. Color appearance models such as CAM16\n * also use information about the environment where the color was\n * observed, known as the viewing conditions.\n *\n * For example, white under the traditional assumption of a midday sun white\n * point is accurately measured as a slightly chromatic blue by CAM16. (roughly,\n * hue 203, chroma 3, lightness 100)\n */\nexport class Cam16 {\n /**\n * All of the CAM16 dimensions can be calculated from 3 of the dimensions, in\n * the following combinations:\n * - {j or q} and {c, m, or s} and hue\n * - jstar, astar, bstar\n * Prefer using a static method that constructs from 3 of those dimensions.\n * This constructor is intended for those methods to use to return all\n * possible dimensions.\n *\n * @param hue\n * @param chroma informally, colorfulness / color intensity. like saturation\n * in HSL, except perceptually accurate.\n * @param j lightness\n * @param q brightness; ratio of lightness to white point's lightness\n * @param m colorfulness\n * @param s saturation; ratio of chroma to white point's chroma\n * @param jstar CAM16-UCS J coordinate\n * @param astar CAM16-UCS a coordinate\n * @param bstar CAM16-UCS b coordinate\n */\n constructor(hue, chroma, j, q, m, s, jstar, astar, bstar) {\n this.hue = hue;\n this.chroma = chroma;\n this.j = j;\n this.q = q;\n this.m = m;\n this.s = s;\n this.jstar = jstar;\n this.astar = astar;\n this.bstar = bstar;\n }\n /**\n * CAM16 instances also have coordinates in the CAM16-UCS space, called J*,\n * a*, b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16\n * specification, and is used to measure distances between colors.\n */\n distance(other) {\n const dJ = this.jstar - other.jstar;\n const dA = this.astar - other.astar;\n const dB = this.bstar - other.bstar;\n const dEPrime = Math.sqrt(dJ * dJ + dA * dA + dB * dB);\n const dE = 1.41 * Math.pow(dEPrime, 0.63);\n return dE;\n }\n /**\n * @param argb ARGB representation of a color.\n * @return CAM16 color, assuming the color was viewed in default viewing\n * conditions.\n */\n static fromInt(argb) {\n return Cam16.fromIntInViewingConditions(argb, ViewingConditions.DEFAULT);\n }\n /**\n * @param argb ARGB representation of a color.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n * @return CAM16 color.\n */\n static fromIntInViewingConditions(argb, viewingConditions) {\n const red = (argb & 0x00ff0000) >> 16;\n const green = (argb & 0x0000ff00) >> 8;\n const blue = (argb & 0x000000ff);\n const redL = utils.linearized(red);\n const greenL = utils.linearized(green);\n const blueL = utils.linearized(blue);\n const x = 0.41233895 * redL + 0.35762064 * greenL + 0.18051042 * blueL;\n const y = 0.2126 * redL + 0.7152 * greenL + 0.0722 * blueL;\n const z = 0.01932141 * redL + 0.11916382 * greenL + 0.95034478 * blueL;\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n const rAF = Math.pow((viewingConditions.fl * Math.abs(rD)) / 100.0, 0.42);\n const gAF = Math.pow((viewingConditions.fl * Math.abs(gD)) / 100.0, 0.42);\n const bAF = Math.pow((viewingConditions.fl * Math.abs(bD)) / 100.0, 0.42);\n const rA = (math.signum(rD) * 400.0 * rAF) / (rAF + 27.13);\n const gA = (math.signum(gD) * 400.0 * gAF) / (gAF + 27.13);\n const bA = (math.signum(bD) * 400.0 * bAF) / (bAF + 27.13);\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n const b = (rA + gA - 2.0 * bA) / 9.0;\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n const atan2 = Math.atan2(b, a);\n const atanDegrees = (atan2 * 180.0) / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360.0 :\n atanDegrees;\n const hueRadians = (hue * Math.PI) / 180.0;\n const ac = p2 * viewingConditions.nbb;\n const j = 100.0 *\n Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z);\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const huePrime = hue < 20.14 ? hue + 360 : hue;\n const eHue = 0.25 * (Math.cos((huePrime * Math.PI) / 180.0 + 2.0) + 3.8);\n const p1 = (50000.0 / 13.0) * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = (p1 * Math.sqrt(a * a + b * b)) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const c = alpha * Math.sqrt(j / 100.0);\n const m = c * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, c, j, q, m, s, jstar, astar, bstar);\n }\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n */\n static fromJch(j, c, h) {\n return Cam16.fromJchInViewingConditions(j, c, h, ViewingConditions.DEFAULT);\n }\n /**\n * @param j CAM16 lightness\n * @param c CAM16 chroma\n * @param h CAM16 hue\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromJchInViewingConditions(j, c, h, viewingConditions) {\n const q = (4.0 / viewingConditions.c) * Math.sqrt(j / 100.0) *\n (viewingConditions.aw + 4.0) * viewingConditions.fLRoot;\n const m = c * viewingConditions.fLRoot;\n const alpha = c / Math.sqrt(j / 100.0);\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n const hueRadians = (h * Math.PI) / 180.0;\n const jstar = ((1.0 + 100.0 * 0.007) * j) / (1.0 + 0.007 * j);\n const mstar = (1.0 / 0.0228) * Math.log(1.0 + 0.0228 * m);\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(h, c, j, q, m, s, jstar, astar, bstar);\n }\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n */\n static fromUcs(jstar, astar, bstar) {\n return Cam16.fromUcsInViewingConditions(jstar, astar, bstar, ViewingConditions.DEFAULT);\n }\n /**\n * @param jstar CAM16-UCS lightness.\n * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the Y axis.\n * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian\n * coordinate on the X axis.\n * @param viewingConditions Information about the environment where the color\n * was observed.\n */\n static fromUcsInViewingConditions(jstar, astar, bstar, viewingConditions) {\n const a = astar;\n const b = bstar;\n const m = Math.sqrt(a * a + b * b);\n const M = (Math.exp(m * 0.0228) - 1.0) / 0.0228;\n const c = M / viewingConditions.fLRoot;\n let h = Math.atan2(b, a) * (180.0 / Math.PI);\n if (h < 0.0) {\n h += 360.0;\n }\n const j = jstar / (1 - (jstar - 100) * 0.007);\n return Cam16.fromJchInViewingConditions(j, c, h, viewingConditions);\n }\n /**\n * @return ARGB representation of color, assuming the color was viewed in\n * default viewing conditions, which are near-identical to the default\n * viewing conditions for sRGB.\n */\n toInt() {\n return this.viewed(ViewingConditions.DEFAULT);\n }\n /**\n * @param viewingConditions Information about the environment where the color\n * will be viewed.\n * @return ARGB representation of color\n */\n viewed(viewingConditions) {\n const alpha = this.chroma === 0.0 || this.j === 0.0 ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n const t = Math.pow(alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73), 1.0 / 0.9);\n const hRad = (this.hue * Math.PI) / 180.0;\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 = eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const p2 = ac / viewingConditions.nbb;\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n const gamma = (23.0 * (p2 + 0.305) * t) /\n (23.0 * p1 + 11.0 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n const argb = utils.argbFromXyz(x, y, z);\n return argb;\n }\n /// Given color expressed in XYZ and viewed in [viewingConditions], convert to\n /// CAM16.\n static fromXyzInViewingConditions(x, y, z, viewingConditions) {\n // Transform XYZ to 'cone'/'rgb' responses\n const rC = 0.401288 * x + 0.650173 * y - 0.051461 * z;\n const gC = -0.250268 * x + 1.204414 * y + 0.045854 * z;\n const bC = -0.002079 * x + 0.048952 * y + 0.953127 * z;\n // Discount illuminant\n const rD = viewingConditions.rgbD[0] * rC;\n const gD = viewingConditions.rgbD[1] * gC;\n const bD = viewingConditions.rgbD[2] * bC;\n // chromatic adaptation\n const rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100.0, 0.42);\n const gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100.0, 0.42);\n const bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100.0, 0.42);\n const rA = math.signum(rD) * 400.0 * rAF / (rAF + 27.13);\n const gA = math.signum(gD) * 400.0 * gAF / (gAF + 27.13);\n const bA = math.signum(bD) * 400.0 * bAF / (bAF + 27.13);\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n // auxiliary components\n const u = (20.0 * rA + 20.0 * gA + 21.0 * bA) / 20.0;\n const p2 = (40.0 * rA + 20.0 * gA + bA) / 20.0;\n // hue\n const atan2 = Math.atan2(b, a);\n const atanDegrees = atan2 * 180.0 / Math.PI;\n const hue = atanDegrees < 0 ? atanDegrees + 360.0 :\n atanDegrees >= 360 ? atanDegrees - 360 :\n atanDegrees;\n const hueRadians = hue * Math.PI / 180.0;\n // achromatic response to color\n const ac = p2 * viewingConditions.nbb;\n // CAM16 lightness and brightness\n const J = 100.0 *\n Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z);\n const Q = (4.0 / viewingConditions.c) * Math.sqrt(J / 100.0) *\n (viewingConditions.aw + 4.0) * (viewingConditions.fLRoot);\n const huePrime = (hue < 20.14) ? hue + 360 : hue;\n const eHue = (1.0 / 4.0) * (Math.cos(huePrime * Math.PI / 180.0 + 2.0) + 3.8);\n const p1 = 50000.0 / 13.0 * eHue * viewingConditions.nc * viewingConditions.ncb;\n const t = p1 * Math.sqrt(a * a + b * b) / (u + 0.305);\n const alpha = Math.pow(t, 0.9) *\n Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n // CAM16 chroma, colorfulness, chroma\n const C = alpha * Math.sqrt(J / 100.0);\n const M = C * viewingConditions.fLRoot;\n const s = 50.0 *\n Math.sqrt((alpha * viewingConditions.c) / (viewingConditions.aw + 4.0));\n // CAM16-UCS components\n const jstar = (1.0 + 100.0 * 0.007) * J / (1.0 + 0.007 * J);\n const mstar = Math.log(1.0 + 0.0228 * M) / 0.0228;\n const astar = mstar * Math.cos(hueRadians);\n const bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, C, J, Q, M, s, jstar, astar, bstar);\n }\n /// XYZ representation of CAM16 seen in [viewingConditions].\n xyzInViewingConditions(viewingConditions) {\n const alpha = (this.chroma === 0.0 || this.j === 0.0) ?\n 0.0 :\n this.chroma / Math.sqrt(this.j / 100.0);\n const t = Math.pow(alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73), 1.0 / 0.9);\n const hRad = this.hue * Math.PI / 180.0;\n const eHue = 0.25 * (Math.cos(hRad + 2.0) + 3.8);\n const ac = viewingConditions.aw *\n Math.pow(this.j / 100.0, 1.0 / viewingConditions.c / viewingConditions.z);\n const p1 = eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const p2 = (ac / viewingConditions.nbb);\n const hSin = Math.sin(hRad);\n const hCos = Math.cos(hRad);\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCBase = Math.max(0, (27.13 * Math.abs(rA)) / (400.0 - Math.abs(rA)));\n const rC = math.signum(rA) * (100.0 / viewingConditions.fl) *\n Math.pow(rCBase, 1.0 / 0.42);\n const gCBase = Math.max(0, (27.13 * Math.abs(gA)) / (400.0 - Math.abs(gA)));\n const gC = math.signum(gA) * (100.0 / viewingConditions.fl) *\n Math.pow(gCBase, 1.0 / 0.42);\n const bCBase = Math.max(0, (27.13 * Math.abs(bA)) / (400.0 - Math.abs(bA)));\n const bC = math.signum(bA) * (100.0 / viewingConditions.fl) *\n Math.pow(bCBase, 1.0 / 0.42);\n const rF = rC / viewingConditions.rgbD[0];\n const gF = gC / viewingConditions.rgbD[1];\n const bF = bC / viewingConditions.rgbD[2];\n const x = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;\n const y = 0.38752654 * rF + 0.62144744 * gF - 0.00897398 * bF;\n const z = -0.01584150 * rF - 0.03412294 * gF + 1.04996444 * bF;\n return [x, y, z];\n }\n}\n//# sourceMappingURL=cam16.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\nimport { Cam16 } from './cam16.js';\nimport { ViewingConditions } from './viewing_conditions.js';\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * A class that solves the HCT equation.\n */\nexport class HctSolver {\n /**\n * Sanitizes a small enough angle in radians.\n *\n * @param angle An angle in radians; must not deviate too much\n * from 0.\n * @return A coterminal angle between 0 and 2pi.\n */\n static sanitizeRadians(angle) {\n return (angle + Math.PI * 8) % (Math.PI * 2);\n }\n /**\n * Delinearizes an RGB component, returning a floating-point\n * number.\n *\n * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents\n * linear R/G/B channel\n * @return 0.0 <= output <= 255.0, color channel converted to\n * regular RGB space\n */\n static trueDelinearized(rgbComponent) {\n const normalized = rgbComponent / 100.0;\n let delinearized = 0.0;\n if (normalized <= 0.0031308) {\n delinearized = normalized * 12.92;\n }\n else {\n delinearized = 1.055 * Math.pow(normalized, 1.0 / 2.4) - 0.055;\n }\n return delinearized * 255.0;\n }\n static chromaticAdaptation(component) {\n const af = Math.pow(Math.abs(component), 0.42);\n return mathUtils.signum(component) * 400.0 * af / (af + 27.13);\n }\n /**\n * Returns the hue of a linear RGB color in CAM16.\n *\n * @param linrgb The linear RGB coordinates of a color.\n * @return The hue of the color in CAM16, in radians.\n */\n static hueOf(linrgb) {\n const scaledDiscount = mathUtils.matrixMultiply(linrgb, HctSolver.SCALED_DISCOUNT_FROM_LINRGB);\n const rA = HctSolver.chromaticAdaptation(scaledDiscount[0]);\n const gA = HctSolver.chromaticAdaptation(scaledDiscount[1]);\n const bA = HctSolver.chromaticAdaptation(scaledDiscount[2]);\n // redness-greenness\n const a = (11.0 * rA + -12.0 * gA + bA) / 11.0;\n // yellowness-blueness\n const b = (rA + gA - 2.0 * bA) / 9.0;\n return Math.atan2(b, a);\n }\n static areInCyclicOrder(a, b, c) {\n const deltaAB = HctSolver.sanitizeRadians(b - a);\n const deltaAC = HctSolver.sanitizeRadians(c - a);\n return deltaAB < deltaAC;\n }\n /**\n * Solves the lerp equation.\n *\n * @param source The starting number.\n * @param mid The number in the middle.\n * @param target The ending number.\n * @return A number t such that lerp(source, target, t) = mid.\n */\n static intercept(source, mid, target) {\n return (mid - source) / (target - source);\n }\n static lerpPoint(source, t, target) {\n return [\n source[0] + (target[0] - source[0]) * t,\n source[1] + (target[1] - source[1]) * t,\n source[2] + (target[2] - source[2]) * t,\n ];\n }\n /**\n * Intersects a segment with a plane.\n *\n * @param source The coordinates of point A.\n * @param coordinate The R-, G-, or B-coordinate of the plane.\n * @param target The coordinates of point B.\n * @param axis The axis the plane is perpendicular with. (0: R, 1:\n * G, 2: B)\n * @return The intersection point of the segment AB with the plane\n * R=coordinate, G=coordinate, or B=coordinate\n */\n static setCoordinate(source, coordinate, target, axis) {\n const t = HctSolver.intercept(source[axis], coordinate, target[axis]);\n return HctSolver.lerpPoint(source, t, target);\n }\n static isBounded(x) {\n return 0.0 <= x && x <= 100.0;\n }\n /**\n * Returns the nth possible vertex of the polygonal intersection.\n *\n * @param y The Y value of the plane.\n * @param n The zero-based index of the point. 0 <= n <= 11.\n * @return The nth possible vertex of the polygonal intersection\n * of the y plane and the RGB cube, in linear RGB coordinates, if\n * it exists. If this possible vertex lies outside of the cube,\n * [-1.0, -1.0, -1.0] is returned.\n */\n static nthVertex(y, n) {\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const coordA = n % 4 <= 1 ? 0.0 : 100.0;\n const coordB = n % 2 === 0 ? 0.0 : 100.0;\n if (n < 4) {\n const g = coordA;\n const b = coordB;\n const r = (y - g * kG - b * kB) / kR;\n if (HctSolver.isBounded(r)) {\n return [r, g, b];\n }\n else {\n return [-1.0, -1.0, -1.0];\n }\n }\n else if (n < 8) {\n const b = coordA;\n const r = coordB;\n const g = (y - r * kR - b * kB) / kG;\n if (HctSolver.isBounded(g)) {\n return [r, g, b];\n }\n else {\n return [-1.0, -1.0, -1.0];\n }\n }\n else {\n const r = coordA;\n const g = coordB;\n const b = (y - r * kR - g * kG) / kB;\n if (HctSolver.isBounded(b)) {\n return [r, g, b];\n }\n else {\n return [-1.0, -1.0, -1.0];\n }\n }\n }\n /**\n * Finds the segment containing the desired color.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return A list of two sets of linear RGB coordinates, each\n * corresponding to an endpoint of the segment containing the\n * desired color.\n */\n static bisectToSegment(y, targetHue) {\n let left = [-1.0, -1.0, -1.0];\n let right = left;\n let leftHue = 0.0;\n let rightHue = 0.0;\n let initialized = false;\n let uncut = true;\n for (let n = 0; n < 12; n++) {\n const mid = HctSolver.nthVertex(y, n);\n if (mid[0] < 0) {\n continue;\n }\n const midHue = HctSolver.hueOf(mid);\n if (!initialized) {\n left = mid;\n right = mid;\n leftHue = midHue;\n rightHue = midHue;\n initialized = true;\n continue;\n }\n if (uncut || HctSolver.areInCyclicOrder(leftHue, midHue, rightHue)) {\n uncut = false;\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rightHue = midHue;\n }\n else {\n left = mid;\n leftHue = midHue;\n }\n }\n }\n return [left, right];\n }\n static midpoint(a, b) {\n return [\n (a[0] + b[0]) / 2,\n (a[1] + b[1]) / 2,\n (a[2] + b[2]) / 2,\n ];\n }\n static criticalPlaneBelow(x) {\n return Math.floor(x - 0.5);\n }\n static criticalPlaneAbove(x) {\n return Math.ceil(x - 0.5);\n }\n /**\n * Finds a color with the given Y and hue on the boundary of the\n * cube.\n *\n * @param y The Y value of the color.\n * @param targetHue The hue of the color.\n * @return The desired color, in linear RGB coordinates.\n */\n static bisectToLimit(y, targetHue) {\n const segment = HctSolver.bisectToSegment(y, targetHue);\n let left = segment[0];\n let leftHue = HctSolver.hueOf(left);\n let right = segment[1];\n for (let axis = 0; axis < 3; axis++) {\n if (left[axis] !== right[axis]) {\n let lPlane = -1;\n let rPlane = 255;\n if (left[axis] < right[axis]) {\n lPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(right[axis]));\n }\n else {\n lPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(left[axis]));\n rPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(right[axis]));\n }\n for (let i = 0; i < 8; i++) {\n if (Math.abs(rPlane - lPlane) <= 1) {\n break;\n }\n else {\n const mPlane = Math.floor((lPlane + rPlane) / 2.0);\n const midPlaneCoordinate = HctSolver.CRITICAL_PLANES[mPlane];\n const mid = HctSolver.setCoordinate(left, midPlaneCoordinate, right, axis);\n const midHue = HctSolver.hueOf(mid);\n if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {\n right = mid;\n rPlane = mPlane;\n }\n else {\n left = mid;\n leftHue = midHue;\n lPlane = mPlane;\n }\n }\n }\n }\n }\n return HctSolver.midpoint(left, right);\n }\n static inverseChromaticAdaptation(adapted) {\n const adaptedAbs = Math.abs(adapted);\n const base = Math.max(0, 27.13 * adaptedAbs / (400.0 - adaptedAbs));\n return mathUtils.signum(adapted) * Math.pow(base, 1.0 / 0.42);\n }\n /**\n * Finds a color with the given hue, chroma, and Y.\n *\n * @param hueRadians The desired hue in radians.\n * @param chroma The desired chroma.\n * @param y The desired Y.\n * @return The desired color as a hexadecimal integer, if found; 0\n * otherwise.\n */\n static findResultByJ(hueRadians, chroma, y) {\n // Initial estimate of j.\n let j = Math.sqrt(y) * 11.0;\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const viewingConditions = ViewingConditions.DEFAULT;\n const tInnerCoeff = 1 / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);\n const eHue = 0.25 * (Math.cos(hueRadians + 2.0) + 3.8);\n const p1 = eHue * (50000.0 / 13.0) * viewingConditions.nc * viewingConditions.ncb;\n const hSin = Math.sin(hueRadians);\n const hCos = Math.cos(hueRadians);\n for (let iterationRound = 0; iterationRound < 5; iterationRound++) {\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n const jNormalized = j / 100.0;\n const alpha = chroma === 0.0 || j === 0.0 ? 0.0 : chroma / Math.sqrt(jNormalized);\n const t = Math.pow(alpha * tInnerCoeff, 1.0 / 0.9);\n const ac = viewingConditions.aw *\n Math.pow(jNormalized, 1.0 / viewingConditions.c / viewingConditions.z);\n const p2 = ac / viewingConditions.nbb;\n const gamma = 23.0 * (p2 + 0.305) * t /\n (23.0 * p1 + 11 * t * hCos + 108.0 * t * hSin);\n const a = gamma * hCos;\n const b = gamma * hSin;\n const rA = (460.0 * p2 + 451.0 * a + 288.0 * b) / 1403.0;\n const gA = (460.0 * p2 - 891.0 * a - 261.0 * b) / 1403.0;\n const bA = (460.0 * p2 - 220.0 * a - 6300.0 * b) / 1403.0;\n const rCScaled = HctSolver.inverseChromaticAdaptation(rA);\n const gCScaled = HctSolver.inverseChromaticAdaptation(gA);\n const bCScaled = HctSolver.inverseChromaticAdaptation(bA);\n const linrgb = mathUtils.matrixMultiply([rCScaled, gCScaled, bCScaled], HctSolver.LINRGB_FROM_SCALED_DISCOUNT);\n // ===========================================================\n // Operations inlined from Cam16 to avoid repeated calculation\n // ===========================================================\n if (linrgb[0] < 0 || linrgb[1] < 0 || linrgb[2] < 0) {\n return 0;\n }\n const kR = HctSolver.Y_FROM_LINRGB[0];\n const kG = HctSolver.Y_FROM_LINRGB[1];\n const kB = HctSolver.Y_FROM_LINRGB[2];\n const fnj = kR * linrgb[0] + kG * linrgb[1] + kB * linrgb[2];\n if (fnj <= 0) {\n return 0;\n }\n if (iterationRound === 4 || Math.abs(fnj - y) < 0.002) {\n if (linrgb[0] > 100.01 || linrgb[1] > 100.01 || linrgb[2] > 100.01) {\n return 0;\n }\n return colorUtils.argbFromLinrgb(linrgb);\n }\n // Iterates with Newton method,\n // Using 2 * fn(j) / j as the approximation of fn'(j)\n j = j - (fnj - y) * j / (2 * fnj);\n }\n return 0;\n }\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return A hexadecimal representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToInt(hueDegrees, chroma, lstar) {\n if (chroma < 0.0001 || lstar < 0.0001 || lstar > 99.9999) {\n return colorUtils.argbFromLstar(lstar);\n }\n hueDegrees = mathUtils.sanitizeDegreesDouble(hueDegrees);\n const hueRadians = hueDegrees / 180 * Math.PI;\n const y = colorUtils.yFromLstar(lstar);\n const exactAnswer = HctSolver.findResultByJ(hueRadians, chroma, y);\n if (exactAnswer !== 0) {\n return exactAnswer;\n }\n const linrgb = HctSolver.bisectToLimit(y, hueRadians);\n return colorUtils.argbFromLinrgb(linrgb);\n }\n /**\n * Finds an sRGB color with the given hue, chroma, and L*, if\n * possible.\n *\n * @param hueDegrees The desired hue, in degrees.\n * @param chroma The desired chroma.\n * @param lstar The desired L*.\n * @return An CAM16 object representing the sRGB color. The color\n * has sufficiently close hue, chroma, and L* to the desired\n * values, if possible; otherwise, the hue and L* will be\n * sufficiently close, and chroma will be maximized.\n */\n static solveToCam(hueDegrees, chroma, lstar) {\n return Cam16.fromInt(HctSolver.solveToInt(hueDegrees, chroma, lstar));\n }\n}\nHctSolver.SCALED_DISCOUNT_FROM_LINRGB = [\n [\n 0.001200833568784504,\n 0.002389694492170889,\n 0.0002795742885861124,\n ],\n [\n 0.0005891086651375999,\n 0.0029785502573438758,\n 0.0003270666104008398,\n ],\n [\n 0.00010146692491640572,\n 0.0005364214359186694,\n 0.0032979401770712076,\n ],\n];\nHctSolver.LINRGB_FROM_SCALED_DISCOUNT = [\n [\n 1373.2198709594231,\n -1100.4251190754821,\n -7.278681089101213,\n ],\n [\n -271.815969077903,\n 559.6580465940733,\n -32.46047482791194,\n ],\n [\n 1.9622899599665666,\n -57.173814538844006,\n 308.7233197812385,\n ],\n];\nHctSolver.Y_FROM_LINRGB = [0.2126, 0.7152, 0.0722];\nHctSolver.CRITICAL_PLANES = [\n 0.015176349177441876, 0.045529047532325624, 0.07588174588720938,\n 0.10623444424209313, 0.13658714259697685, 0.16693984095186062,\n 0.19729253930674434, 0.2276452376616281, 0.2579979360165119,\n 0.28835063437139563, 0.3188300904430532, 0.350925934958123,\n 0.3848314933096426, 0.42057480301049466, 0.458183274052838,\n 0.4976837250274023, 0.5391024159806381, 0.5824650784040898,\n 0.6277969426914107, 0.6751227633498623, 0.7244668422128921,\n 0.775853049866786, 0.829304845476233, 0.8848452951698498,\n 0.942497089126609, 1.0022825574869039, 1.0642236851973577,\n 1.1283421258858297, 1.1946592148522128, 1.2631959812511864,\n 1.3339731595349034, 1.407011200216447, 1.4823302800086415,\n 1.5599503113873272, 1.6398909516233677, 1.7221716113234105,\n 1.8068114625156377, 1.8938294463134073, 1.9832442801866852,\n 2.075074464868551, 2.1693382909216234, 2.2660538449872063,\n 2.36523901573795, 2.4669114995532007, 2.5710888059345764,\n 2.6777882626779785, 2.7870270208169257, 2.898822059350997,\n 3.0131901897720907, 3.1301480604002863, 3.2497121605402226,\n 3.3718988244681087, 3.4967242352587946, 3.624204428461639,\n 3.754355295633311, 3.887192587735158, 4.022731918402185,\n 4.160988767090289, 4.301978482107941, 4.445716283538092,\n 4.592217266055746, 4.741496401646282, 4.893568542229298,\n 5.048448422192488, 5.20615066083972, 5.3666897647573375,\n 5.5300801301023865, 5.696336044816294, 5.865471690767354,\n 6.037501145825082, 6.212438385869475, 6.390297286737924,\n 6.571091626112461, 6.7548350853498045, 6.941541251256611,\n 7.131223617812143, 7.323895587840543, 7.5195704746346665,\n 7.7182615035334345, 7.919981813454504, 8.124744458384042,\n 8.332562408825165, 8.543448553206703, 8.757415699253682,\n 8.974476575321063, 9.194643831691977, 9.417930041841839,\n 9.644347703669503, 9.873909240696694, 10.106627003236781,\n 10.342513269534024, 10.58158024687427, 10.8238400726681,\n 11.069304815507364, 11.317986476196008, 11.569896988756009,\n 11.825048221409341, 12.083451977536606, 12.345119996613247,\n 12.610063955123938, 12.878295467455942, 13.149826086772048,\n 13.42466730586372, 13.702830557985108, 13.984327217668513,\n 14.269168601521828, 14.55736596900856, 14.848930523210871,\n 15.143873411576273, 15.44220572664832, 15.743938506781891,\n 16.04908273684337, 16.35764934889634, 16.66964922287304,\n 16.985093187232053, 17.30399201960269, 17.62635644741625,\n 17.95219714852476, 18.281524751807332, 18.614349837764564,\n 18.95068293910138, 19.290534541298456, 19.633915083172692,\n 19.98083495742689, 20.331304511189067, 20.685334046541502,\n 21.042933821039977, 21.404114048223256, 21.76888489811322,\n 22.137256497705877, 22.50923893145328, 22.884842241736916,\n 23.264076429332462, 23.6469514538663, 24.033477234264016,\n 24.42366364919083, 24.817520537484558, 25.21505769858089,\n 25.61628489293138, 26.021211842414342, 26.429848230738664,\n 26.842203703840827, 27.258287870275353, 27.678110301598522,\n 28.10168053274597, 28.529008062403893, 28.96010235337422,\n 29.39497283293396, 29.83362889318845, 30.276079891419332,\n 30.722335150426627, 31.172403958865512, 31.62629557157785,\n 32.08401920991837, 32.54558406207592, 33.010999283389665,\n 33.4802739966603, 33.953417292456834, 34.430438229418264,\n 34.911345834551085, 35.39614910352207, 35.88485700094671,\n 36.37747846067349, 36.87402238606382, 37.37449765026789,\n 37.87891309649659, 38.38727753828926, 38.89959975977785,\n 39.41588851594697, 39.93615253289054, 40.460400508064545,\n 40.98864111053629, 41.520882981230194, 42.05713473317016,\n 42.597404951718396, 43.141702194811224, 43.6900349931913,\n 44.24241185063697, 44.798841244188324, 45.35933162437017,\n 45.92389141541209, 46.49252901546552, 47.065252796817916,\n 47.64207110610409, 48.22299226451468, 48.808024568002054,\n 49.3971762874833, 49.9904556690408, 50.587870934119984,\n 51.189430279724725, 51.79514187861014, 52.40501387947288,\n 53.0190544071392, 53.637271562750364, 54.259673423945976,\n 54.88626804504493, 55.517063457223934, 56.15206766869424,\n 56.79128866487574, 57.43473440856916, 58.08241284012621,\n 58.734331877617365, 59.39049941699807, 60.05092333227251,\n 60.715611475655585, 61.38457167773311, 62.057811747619894,\n 62.7353394731159, 63.417162620860914, 64.10328893648692,\n 64.79372614476921, 65.48848194977529, 66.18756403501224,\n 66.89098006357258, 67.59873767827808, 68.31084450182222,\n 69.02730813691093, 69.74813616640164, 70.47333615344107,\n 71.20291564160104, 71.93688215501312, 72.67524319850172,\n 73.41800625771542, 74.16517879925733, 74.9167682708136,\n 75.67278210128072, 76.43322770089146, 77.1981124613393,\n 77.96744375590167, 78.74122893956174, 79.51947534912904,\n 80.30219030335869, 81.08938110306934, 81.88105503125999,\n 82.67721935322541, 83.4778813166706, 84.28304815182372,\n 85.09272707154808, 85.90692527145302, 86.72564993000343,\n 87.54890820862819, 88.3767072518277, 89.2090541872801,\n 90.04595612594655, 90.88742016217518, 91.73345337380438,\n 92.58406282226491, 93.43925555268066, 94.29903859396902,\n 95.16341895893969, 96.03240364439274, 96.9059996312159,\n 97.78421388448044, 98.6670533535366, 99.55452497210776,\n];\n//# sourceMappingURL=hct_solver.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A color system built using CAM16 hue and chroma, and L* from\n * L*a*b*.\n *\n * Using L* creates a link between the color system, contrast, and thus\n * accessibility. Contrast ratio depends on relative luminance, or Y in the XYZ\n * color space. L*, or perceptual luminance can be calculated from Y.\n *\n * Unlike Y, L* is linear to human perception, allowing trivial creation of\n * accurate color tones.\n *\n * Unlike contrast ratio, measuring contrast in L* is linear, and simple to\n * calculate. A difference of 40 in HCT tone guarantees a contrast ratio >= 3.0,\n * and a difference of 50 guarantees a contrast ratio >= 4.5.\n */\nimport * as utils from '../utils/color_utils.js';\nimport { Cam16 } from './cam16.js';\nimport { HctSolver } from './hct_solver.js';\nimport { ViewingConditions } from './viewing_conditions.js';\n/**\n * HCT, hue, chroma, and tone. A color system that provides a perceptually\n * accurate color measurement system that can also accurately render what colors\n * will appear as in different lighting environments.\n */\nexport class Hct {\n static from(hue, chroma, tone) {\n return new Hct(HctSolver.solveToInt(hue, chroma, tone));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return HCT representation of a color in default viewing conditions\n */\n static fromInt(argb) {\n return new Hct(argb);\n }\n toInt() {\n return this.argb;\n }\n /**\n * A number, in degrees, representing ex. red, orange, yellow, etc.\n * Ranges from 0 <= hue < 360.\n */\n get hue() {\n return this.internalHue;\n }\n /**\n * @param newHue 0 <= newHue < 360; invalid values are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set hue(newHue) {\n this.setInternalState(HctSolver.solveToInt(newHue, this.internalChroma, this.internalTone));\n }\n get chroma() {\n return this.internalChroma;\n }\n /**\n * @param newChroma 0 <= newChroma < ?\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set chroma(newChroma) {\n this.setInternalState(HctSolver.solveToInt(this.internalHue, newChroma, this.internalTone));\n }\n /** Lightness. Ranges from 0 to 100. */\n get tone() {\n return this.internalTone;\n }\n /**\n * @param newTone 0 <= newTone <= 100; invalid valids are corrected.\n * Chroma may decrease because chroma has a different maximum for any given\n * hue and tone.\n */\n set tone(newTone) {\n this.setInternalState(HctSolver.solveToInt(this.internalHue, this.internalChroma, newTone));\n }\n constructor(argb) {\n this.argb = argb;\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n setInternalState(argb) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue;\n this.internalChroma = cam.chroma;\n this.internalTone = utils.lstarFromArgb(argb);\n this.argb = argb;\n }\n /**\n * Translates a color into different [ViewingConditions].\n *\n * Colors change appearance. They look different with lights on versus off,\n * the same color, as in hex code, on white looks different when on black.\n * This is called color relativity, most famously explicated by Josef Albers\n * in Interaction of Color.\n *\n * In color science, color appearance models can account for this and\n * calculate the appearance of a color in different settings. HCT is based on\n * CAM16, a color appearance model, and uses it to make these calculations.\n *\n * See [ViewingConditions.make] for parameters affecting color appearance.\n */\n inViewingConditions(vc) {\n // 1. Use CAM16 to find XYZ coordinates of color in specified VC.\n const cam = Cam16.fromInt(this.toInt());\n const viewedInVc = cam.xyzInViewingConditions(vc);\n // 2. Create CAM16 of those XYZ coordinates in default VC.\n const recastInVc = Cam16.fromXyzInViewingConditions(viewedInVc[0], viewedInVc[1], viewedInVc[2], ViewingConditions.make());\n // 3. Create HCT from:\n // - CAM16 using default VC with XYZ coordinates in specified VC.\n // - L* converted from Y in XYZ coordinates in specified VC.\n const recastHct = Hct.from(recastInVc.hue, recastInVc.chroma, utils.lstarFromY(viewedInVc[1]));\n return recastHct;\n }\n}\n//# sourceMappingURL=hct.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport { Cam16 } from '../hct/cam16.js';\nimport { Hct } from '../hct/hct.js';\nimport * as colorUtils from '../utils/color_utils.js';\nimport * as mathUtils from '../utils/math_utils.js';\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * Functions for blending in HCT and CAM16.\n */\nexport class Blend {\n /**\n * Blend the design color's HCT hue towards the key color's HCT\n * hue, in a way that leaves the original color recognizable and\n * recognizably shifted towards the key color.\n *\n * @param designColor ARGB representation of an arbitrary color.\n * @param sourceColor ARGB representation of the main theme color.\n * @return The design color with a hue shifted towards the\n * system's color, a slightly warmer/cooler variant of the design\n * color's hue.\n */\n static harmonize(designColor, sourceColor) {\n const fromHct = Hct.fromInt(designColor);\n const toHct = Hct.fromInt(sourceColor);\n const differenceDegrees = mathUtils.differenceDegrees(fromHct.hue, toHct.hue);\n const rotationDegrees = Math.min(differenceDegrees * 0.5, 15.0);\n const outputHue = mathUtils.sanitizeDegreesDouble(fromHct.hue +\n rotationDegrees * mathUtils.rotationDirection(fromHct.hue, toHct.hue));\n return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();\n }\n /**\n * Blends hue from one color into another. The chroma and tone of\n * the original color are maintained.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, with a hue blended towards to. Chroma and tone\n * are constant.\n */\n static hctHue(from, to, amount) {\n const ucs = Blend.cam16Ucs(from, to, amount);\n const ucsCam = Cam16.fromInt(ucs);\n const fromCam = Cam16.fromInt(from);\n const blended = Hct.from(ucsCam.hue, fromCam.chroma, colorUtils.lstarFromArgb(from));\n return blended.toInt();\n }\n /**\n * Blend in CAM16-UCS space.\n *\n * @param from ARGB representation of color\n * @param to ARGB representation of color\n * @param amount how much blending to perform; 0.0 >= and <= 1.0\n * @return from, blended towards to. Hue, chroma, and tone will\n * change.\n */\n static cam16Ucs(from, to, amount) {\n const fromCam = Cam16.fromInt(from);\n const toCam = Cam16.fromInt(to);\n const fromJ = fromCam.jstar;\n const fromA = fromCam.astar;\n const fromB = fromCam.bstar;\n const toJ = toCam.jstar;\n const toA = toCam.astar;\n const toB = toCam.bstar;\n const jstar = fromJ + (toJ - fromJ) * amount;\n const astar = fromA + (toA - fromA) * amount;\n const bstar = fromB + (toB - fromB) * amount;\n return Cam16.fromUcs(jstar, astar, bstar).toInt();\n }\n}\n//# sourceMappingURL=blend.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\nimport * as utils from '../utils/color_utils.js';\nimport * as math from '../utils/math_utils.js';\n/**\n * Utility methods for calculating contrast given two colors, or calculating a\n * color given one color and a contrast ratio.\n *\n * Contrast ratio is calculated using XYZ's Y. When linearized to match human\n * perception, Y becomes HCT's tone and L*a*b*'s' L*. Informally, this is the\n * lightness of a color.\n *\n * Methods refer to tone, T in the the HCT color space.\n * Tone is equivalent to L* in the L*a*b* color space, or L in the LCH color\n * space.\n */\nexport class Contrast {\n /**\n * Returns a contrast ratio, which ranges from 1 to 21.\n *\n * @param toneA Tone between 0 and 100. Values outside will be clamped.\n * @param toneB Tone between 0 and 100. Values outside will be clamped.\n */\n static ratioOfTones(toneA, toneB) {\n toneA = math.clampDouble(0.0, 100.0, toneA);\n toneB = math.clampDouble(0.0, 100.0, toneB);\n return Contrast.ratioOfYs(utils.yFromLstar(toneA), utils.yFromLstar(toneB));\n }\n static ratioOfYs(y1, y2) {\n const lighter = y1 > y2 ? y1 : y2;\n const darker = (lighter === y2) ? y1 : y2;\n return (lighter + 5.0) / (darker + 5.0);\n }\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighter(tone, ratio) {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n const darkY = utils.yFromLstar(tone);\n const lightY = ratio * (darkY + 5.0) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(lightY) + 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n /**\n * Returns a tone <= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns -1 if ratio cannot be achieved with tone parameter.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in -1 being returned.\n * @param ratio Contrast ratio of return value and tone.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darker(tone, ratio) {\n if (tone < 0.0 || tone > 100.0) {\n return -1.0;\n }\n const lightY = utils.yFromLstar(tone);\n const darkY = ((lightY + 5.0) / ratio) - 5.0;\n const realContrast = Contrast.ratioOfYs(lightY, darkY);\n const delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > 0.04) {\n return -1;\n }\n // Ensure gamut mapping, which requires a 'range' on tone, will still result\n // the correct ratio by darkening slightly.\n const returnValue = utils.lstarFromY(darkY) - 0.4;\n if (returnValue < 0 || returnValue > 100) {\n return -1;\n }\n return returnValue;\n }\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the ratio with tone. For example, there is no color lighter than T100.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 100 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static lighterUnsafe(tone, ratio) {\n const lighterSafe = Contrast.lighter(tone, ratio);\n return (lighterSafe < 0.0) ? 100.0 : lighterSafe;\n }\n /**\n * Returns a tone >= tone parameter that ensures ratio parameter.\n * Return value is between 0 and 100.\n * Returns 100 if ratio cannot be achieved with tone parameter.\n *\n * This method is unsafe because the returned value is guaranteed to be in\n * bounds for tone, i.e. between 0 and 100. However, that value may not reach\n * the [ratio with [tone]. For example, there is no color darker than T0.\n *\n * @param tone Tone return value must contrast with.\n * Range is 0 to 100. Invalid values will result in 0 being returned.\n * @param ratio Desired contrast ratio of return value and tone parameter.\n * Range is 1 to 21, invalid values have undefined behavior.\n */\n static darkerUnsafe(tone, ratio) {\n const darkerSafe = Contrast.darker(tone, ratio);\n return (darkerSafe < 0.0) ? 0.0 : darkerSafe;\n }\n}\n//# sourceMappingURL=contrast.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Hct } from '../hct/hct.js';\n// material_color_utilities is designed to have a consistent API across\n// platforms and modular components that can be moved around easily. Using a\n// class as a namespace facilitates this.\n//\n// tslint:disable:class-as-namespace\n/**\n * Check and/or fix universally disliked colors.\n * Color science studies of color preference indicate universal distaste for\n * dark yellow-greens, and also show this is correlated to distate for\n * biological waste and rotting food.\n *\n * See Palmer and Schloss, 2010 or Schloss and Palmer's Chapter 21 in Handbook\n * of Color Psychology (2015).\n */\nexport class DislikeAnalyzer {\n /**\n * Returns true if a color is disliked.\n *\n * @param hct A color to be judged.\n * @return Whether the color is disliked.\n *\n * Disliked is defined as a dark yellow-green that is not neutral.\n */\n static isDisliked(hct) {\n const huePasses = Math.round(hct.hue) >= 90.0 && Math.round(hct.hue) <= 111.0;\n const chromaPasses = Math.round(hct.chroma) > 16.0;\n const tonePasses = Math.round(hct.tone) < 65.0;\n return huePasses && chromaPasses && tonePasses;\n }\n /**\n * If a color is disliked, lighten it to make it likable.\n *\n * @param hct A color to be judged.\n * @return A new color if the original color is disliked, or the original\n * color if it is acceptable.\n */\n static fixIfDisliked(hct) {\n if (DislikeAnalyzer.isDisliked(hct)) {\n return Hct.from(hct.hue, hct.chroma, 70.0);\n }\n return hct;\n }\n}\n//# sourceMappingURL=dislike_analyzer.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Contrast } from '../contrast/contrast.js';\nimport * as math from '../utils/math_utils.js';\n/**\n * A color that adjusts itself based on UI state provided by DynamicScheme.\n *\n * Colors without backgrounds do not change tone when contrast changes. Colors\n * with backgrounds become closer to their background as contrast lowers, and\n * further when contrast increases.\n *\n * Prefer static constructors. They require either a hexcode, a palette and\n * tone, or a hue and chroma. Optionally, they can provide a background\n * DynamicColor.\n */\nexport class DynamicColor {\n /**\n * Create a DynamicColor defined by a TonalPalette and HCT tone.\n *\n * @param args Functions with DynamicScheme as input. Must provide a palette\n * and tone. May provide a background DynamicColor and ToneDeltaConstraint.\n */\n static fromPalette(args) {\n return new DynamicColor(args.name ?? '', args.palette, args.tone, args.isBackground ?? false, args.background, args.secondBackground, args.contrastCurve, args.toneDeltaPair);\n }\n /**\n * The base constructor for DynamicColor.\n *\n * _Strongly_ prefer using one of the convenience constructors. This class is\n * arguably too flexible to ensure it can support any scenario. Functional\n * arguments allow overriding without risks that come with subclasses.\n *\n * For example, the default behavior of adjust tone at max contrast\n * to be at a 7.0 ratio with its background is principled and\n * matches accessibility guidance. That does not mean it's the desired\n * approach for _every_ design system, and every color pairing,\n * always, in every case.\n *\n * @param name The name of the dynamic color. Defaults to empty.\n * @param palette Function that provides a TonalPalette given\n * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this\n * replaces the need to specify hue/chroma. By providing a tonal palette, when\n * contrast adjustments are made, intended chroma can be preserved.\n * @param tone Function that provides a tone, given a DynamicScheme.\n * @param isBackground Whether this dynamic color is a background, with\n * some other color as the foreground. Defaults to false.\n * @param background The background of the dynamic color (as a function of a\n * `DynamicScheme`), if it exists.\n * @param secondBackground A second background of the dynamic color (as a\n * function of a `DynamicScheme`), if it\n * exists.\n * @param contrastCurve A `ContrastCurve` object specifying how its contrast\n * against its background should behave in various contrast levels options.\n * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta\n * constraint between two colors. One of them must be the color being\n * constructed.\n */\n constructor(name, palette, tone, isBackground, background, secondBackground, contrastCurve, toneDeltaPair) {\n this.name = name;\n this.palette = palette;\n this.tone = tone;\n this.isBackground = isBackground;\n this.background = background;\n this.secondBackground = secondBackground;\n this.contrastCurve = contrastCurve;\n this.toneDeltaPair = toneDeltaPair;\n this.hctCache = new Map();\n if ((!background) && secondBackground) {\n throw new Error(`Color ${name} has secondBackground` +\n `defined, but background is not defined.`);\n }\n if ((!background) && contrastCurve) {\n throw new Error(`Color ${name} has contrastCurve` +\n `defined, but background is not defined.`);\n }\n if (background && !contrastCurve) {\n throw new Error(`Color ${name} has background` +\n `defined, but contrastCurve is not defined.`);\n }\n }\n /**\n * Return a ARGB integer (i.e. a hex code).\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getArgb(scheme) {\n return this.getHct(scheme).toInt();\n }\n /**\n * Return a color, expressed in the HCT color space, that this\n * DynamicColor is under the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getHct(scheme) {\n const cachedAnswer = this.hctCache.get(scheme);\n if (cachedAnswer != null) {\n return cachedAnswer;\n }\n const tone = this.getTone(scheme);\n const answer = this.palette(scheme).getHct(tone);\n if (this.hctCache.size > 4) {\n this.hctCache.clear();\n }\n this.hctCache.set(scheme, answer);\n return answer;\n }\n /**\n * Return a tone, T in the HCT color space, that this DynamicColor is under\n * the conditions in scheme.\n *\n * @param scheme Defines the conditions of the user interface, for example,\n * whether or not it is dark mode or light mode, and what the desired\n * contrast level is.\n */\n getTone(scheme) {\n const decreasingContrast = scheme.contrastLevel < 0;\n // Case 1: dual foreground, pair of colors with delta constraint.\n if (this.toneDeltaPair) {\n const toneDeltaPair = this.toneDeltaPair(scheme);\n const roleA = toneDeltaPair.roleA;\n const roleB = toneDeltaPair.roleB;\n const delta = toneDeltaPair.delta;\n const polarity = toneDeltaPair.polarity;\n const stayTogether = toneDeltaPair.stayTogether;\n const bg = this.background(scheme);\n const bgTone = bg.getTone(scheme);\n const aIsNearer = (polarity === 'nearer' ||\n (polarity === 'lighter' && !scheme.isDark) ||\n (polarity === 'darker' && scheme.isDark));\n const nearer = aIsNearer ? roleA : roleB;\n const farther = aIsNearer ? roleB : roleA;\n const amNearer = this.name === nearer.name;\n const expansionDir = scheme.isDark ? 1 : -1;\n // 1st round: solve to min, each\n const nContrast = nearer.contrastCurve.get(scheme.contrastLevel);\n const fContrast = farther.contrastCurve.get(scheme.contrastLevel);\n // If a color is good enough, it is not adjusted.\n // Initial and adjusted tones for `nearer`\n const nInitialTone = nearer.tone(scheme);\n let nTone = Contrast.ratioOfTones(bgTone, nInitialTone) >= nContrast ?\n nInitialTone :\n DynamicColor.foregroundTone(bgTone, nContrast);\n // Initial and adjusted tones for `farther`\n const fInitialTone = farther.tone(scheme);\n let fTone = Contrast.ratioOfTones(bgTone, fInitialTone) >= fContrast ?\n fInitialTone :\n DynamicColor.foregroundTone(bgTone, fContrast);\n if (decreasingContrast) {\n // If decreasing contrast, adjust color to the \"bare minimum\"\n // that satisfies contrast.\n nTone = DynamicColor.foregroundTone(bgTone, nContrast);\n fTone = DynamicColor.foregroundTone(bgTone, fContrast);\n }\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones satisfy the constraint; no change needed.\n }\n else {\n // 2nd round: expand farther to match delta.\n fTone = math.clampDouble(0, 100, nTone + delta * expansionDir);\n if ((fTone - nTone) * expansionDir >= delta) {\n // Good! Tones now satisfy the constraint; no change needed.\n }\n else {\n // 3rd round: contract nearer to match delta.\n nTone = math.clampDouble(0, 100, fTone - delta * expansionDir);\n }\n }\n // Avoids the 50-59 awkward zone.\n if (50 <= nTone && nTone < 60) {\n // If `nearer` is in the awkward zone, move it away, together with\n // `farther`.\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n }\n else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n }\n else if (50 <= fTone && fTone < 60) {\n if (stayTogether) {\n // Fixes both, to avoid two colors on opposite sides of the \"awkward\n // zone\".\n if (expansionDir > 0) {\n nTone = 60;\n fTone = Math.max(fTone, nTone + delta * expansionDir);\n }\n else {\n nTone = 49;\n fTone = Math.min(fTone, nTone + delta * expansionDir);\n }\n }\n else {\n // Not required to stay together; fixes just one.\n if (expansionDir > 0) {\n fTone = 60;\n }\n else {\n fTone = 49;\n }\n }\n }\n // Returns `nTone` if this color is `nearer`, otherwise `fTone`.\n return amNearer ? nTone : fTone;\n }\n else {\n // Case 2: No contrast pair; just solve for itself.\n let answer = this.tone(scheme);\n if (this.background == null) {\n return answer; // No adjustment for colors with no background.\n }\n const bgTone = this.background(scheme).getTone(scheme);\n const desiredRatio = this.contrastCurve.get(scheme.contrastLevel);\n if (Contrast.ratioOfTones(bgTone, answer) >= desiredRatio) {\n // Don't \"improve\" what's good enough.\n }\n else {\n // Rough improvement.\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n if (decreasingContrast) {\n answer = DynamicColor.foregroundTone(bgTone, desiredRatio);\n }\n if (this.isBackground && 50 <= answer && answer < 60) {\n // Must adjust\n if (Contrast.ratioOfTones(49, bgTone) >= desiredRatio) {\n answer = 49;\n }\n else {\n answer = 60;\n }\n }\n if (this.secondBackground) {\n // Case 3: Adjust for dual backgrounds.\n const [bg1, bg2] = [this.background, this.secondBackground];\n const [bgTone1, bgTone2] = [bg1(scheme).getTone(scheme), bg2(scheme).getTone(scheme)];\n const [upper, lower] = [Math.max(bgTone1, bgTone2), Math.min(bgTone1, bgTone2)];\n if (Contrast.ratioOfTones(upper, answer) >= desiredRatio &&\n Contrast.ratioOfTones(lower, answer) >= desiredRatio) {\n return answer;\n }\n // The darkest light tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const lightOption = Contrast.lighter(upper, desiredRatio);\n // The lightest dark tone that satisfies the desired ratio,\n // or -1 if such ratio cannot be reached.\n const darkOption = Contrast.darker(lower, desiredRatio);\n // Tones suitable for the foreground.\n const availables = [];\n if (lightOption !== -1)\n availables.push(lightOption);\n if (darkOption !== -1)\n availables.push(darkOption);\n const prefersLight = DynamicColor.tonePrefersLightForeground(bgTone1) ||\n DynamicColor.tonePrefersLightForeground(bgTone2);\n if (prefersLight) {\n return (lightOption < 0) ? 100 : lightOption;\n }\n if (availables.length === 1) {\n return availables[0];\n }\n return (darkOption < 0) ? 0 : darkOption;\n }\n return answer;\n }\n }\n /**\n * Given a background tone, find a foreground tone, while ensuring they reach\n * a contrast ratio that is as close to [ratio] as possible.\n *\n * @param bgTone Tone in HCT. Range is 0 to 100, undefined behavior when it\n * falls outside that range.\n * @param ratio The contrast ratio desired between bgTone and the return\n * value.\n */\n static foregroundTone(bgTone, ratio) {\n const lighterTone = Contrast.lighterUnsafe(bgTone, ratio);\n const darkerTone = Contrast.darkerUnsafe(bgTone, ratio);\n const lighterRatio = Contrast.ratioOfTones(lighterTone, bgTone);\n const darkerRatio = Contrast.ratioOfTones(darkerTone, bgTone);\n const preferLighter = DynamicColor.tonePrefersLightForeground(bgTone);\n if (preferLighter) {\n // This handles an edge case where the initial contrast ratio is high\n // (ex. 13.0), and the ratio passed to the function is that high\n // ratio, and both the lighter and darker ratio fails to pass that\n // ratio.\n //\n // This was observed with Tonal Spot's On Primary Container turning\n // black momentarily between high and max contrast in light mode. PC's\n // standard tone was T90, OPC's was T10, it was light mode, and the\n // contrast value was 0.6568521221032331.\n const negligibleDifference = Math.abs(lighterRatio - darkerRatio) < 0.1 &&\n lighterRatio < ratio && darkerRatio < ratio;\n return lighterRatio >= ratio || lighterRatio >= darkerRatio ||\n negligibleDifference ?\n lighterTone :\n darkerTone;\n }\n else {\n return darkerRatio >= ratio || darkerRatio >= lighterRatio ? darkerTone :\n lighterTone;\n }\n }\n /**\n * Returns whether [tone] prefers a light foreground.\n *\n * People prefer white foregrounds on ~T60-70. Observed over time, and also\n * by Andrew Somers during research for APCA.\n *\n * T60 used as to create the smallest discontinuity possible when skipping\n * down to T49 in order to ensure light foregrounds.\n * Since `tertiaryContainer` in dark monochrome scheme requires a tone of\n * 60, it should not be adjusted. Therefore, 60 is excluded here.\n */\n static tonePrefersLightForeground(tone) {\n return Math.round(tone) < 60.0;\n }\n /**\n * Returns whether [tone] can reach a contrast ratio of 4.5 with a lighter\n * color.\n */\n static toneAllowsLightForeground(tone) {\n return Math.round(tone) <= 49.0;\n }\n /**\n * Adjust a tone such that white has 4.5 contrast, if the tone is\n * reasonably close to supporting it.\n */\n static enableLightForeground(tone) {\n if (DynamicColor.tonePrefersLightForeground(tone) &&\n !DynamicColor.toneAllowsLightForeground(tone)) {\n return 49.0;\n }\n return tone;\n }\n}\n//# sourceMappingURL=dynamic_color.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Hct } from '../hct/hct.js';\n/**\n * A convenience class for retrieving colors that are constant in hue and\n * chroma, but vary in tone.\n */\nexport class TonalPalette {\n /**\n * @param argb ARGB representation of a color\n * @return Tones matching that color's hue and chroma.\n */\n static fromInt(argb) {\n const hct = Hct.fromInt(argb);\n return TonalPalette.fromHct(hct);\n }\n /**\n * @param hct Hct\n * @return Tones matching that color's hue and chroma.\n */\n static fromHct(hct) {\n return new TonalPalette(hct.hue, hct.chroma, hct);\n }\n /**\n * @param hue HCT hue\n * @param chroma HCT chroma\n * @return Tones matching hue and chroma.\n */\n static fromHueAndChroma(hue, chroma) {\n const keyColor = new KeyColor(hue, chroma).create();\n return new TonalPalette(hue, chroma, keyColor);\n }\n constructor(hue, chroma, keyColor) {\n this.hue = hue;\n this.chroma = chroma;\n this.keyColor = keyColor;\n this.cache = new Map();\n }\n /**\n * @param tone HCT tone, measured from 0 to 100.\n * @return ARGB representation of a color with that tone.\n */\n tone(tone) {\n let argb = this.cache.get(tone);\n if (argb === undefined) {\n argb = Hct.from(this.hue, this.chroma, tone).toInt();\n this.cache.set(tone, argb);\n }\n return argb;\n }\n /**\n * @param tone HCT tone.\n * @return HCT representation of a color with that tone.\n */\n getHct(tone) {\n return Hct.fromInt(this.tone(tone));\n }\n}\n/**\n * Key color is a color that represents the hue and chroma of a tonal palette\n */\nclass KeyColor {\n constructor(hue, requestedChroma) {\n this.hue = hue;\n this.requestedChroma = requestedChroma;\n // Cache that maps tone to max chroma to avoid duplicated HCT calculation.\n this.chromaCache = new Map();\n this.maxChromaValue = 200.0;\n }\n /**\n * Creates a key color from a [hue] and a [chroma].\n * The key color is the first tone, starting from T50, matching the given hue\n * and chroma.\n *\n * @return Key color [Hct]\n */\n create() {\n // Pivot around T50 because T50 has the most chroma available, on\n // average. Thus it is most likely to have a direct answer.\n const pivotTone = 50;\n const toneStepSize = 1;\n // Epsilon to accept values slightly higher than the requested chroma.\n const epsilon = 0.01;\n // Binary search to find the tone that can provide a chroma that is closest\n // to the requested chroma.\n let lowerTone = 0;\n let upperTone = 100;\n while (lowerTone < upperTone) {\n const midTone = Math.floor((lowerTone + upperTone) / 2);\n const isAscending = this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);\n const sufficientChroma = this.maxChroma(midTone) >= this.requestedChroma - epsilon;\n if (sufficientChroma) {\n // Either range [lowerTone, midTone] or [midTone, upperTone] has\n // the answer, so search in the range that is closer the pivot tone.\n if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {\n upperTone = midTone;\n }\n else {\n if (lowerTone === midTone) {\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n lowerTone = midTone;\n }\n }\n else {\n // As there is no sufficient chroma in the midTone, follow the direction\n // to the chroma peak.\n if (isAscending) {\n lowerTone = midTone + toneStepSize;\n }\n else {\n // Keep midTone for potential chroma peak.\n upperTone = midTone;\n }\n }\n }\n return Hct.from(this.hue, this.requestedChroma, lowerTone);\n }\n // Find the maximum chroma for a given tone\n maxChroma(tone) {\n if (this.chromaCache.has(tone)) {\n return this.chromaCache.get(tone);\n }\n const chroma = Hct.from(this.hue, this.maxChromaValue, tone).chroma;\n this.chromaCache.set(tone, chroma);\n return chroma;\n }\n}\n//# sourceMappingURL=tonal_palette.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as math from '../utils/math_utils.js';\n/**\n * A class containing a value that changes with the contrast level.\n *\n * Usually represents the contrast requirements for a dynamic color on its\n * background. The four values correspond to values for contrast levels -1.0,\n * 0.0, 0.5, and 1.0, respectively.\n */\nexport class ContrastCurve {\n /**\n * Creates a `ContrastCurve` object.\n *\n * @param low Value for contrast level -1.0\n * @param normal Value for contrast level 0.0\n * @param medium Value for contrast level 0.5\n * @param high Value for contrast level 1.0\n */\n constructor(low, normal, medium, high) {\n this.low = low;\n this.normal = normal;\n this.medium = medium;\n this.high = high;\n }\n /**\n * Returns the value at a given contrast level.\n *\n * @param contrastLevel The contrast level. 0.0 is the default (normal); -1.0\n * is the lowest; 1.0 is the highest.\n * @return The value. For contrast ratios, a number between 1.0 and 21.0.\n */\n get(contrastLevel) {\n if (contrastLevel <= -1.0) {\n return this.low;\n }\n else if (contrastLevel < 0.0) {\n return math.lerp(this.low, this.normal, (contrastLevel - (-1)) / 1);\n }\n else if (contrastLevel < 0.5) {\n return math.lerp(this.normal, this.medium, (contrastLevel - 0) / 0.5);\n }\n else if (contrastLevel < 1.0) {\n return math.lerp(this.medium, this.high, (contrastLevel - 0.5) / 0.5);\n }\n else {\n return this.high;\n }\n }\n}\n//# sourceMappingURL=contrast_curve.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Documents a constraint between two DynamicColors, in which their tones must\n * have a certain distance from each other.\n *\n * Prefer a DynamicColor with a background, this is for special cases when\n * designers want tonal distance, literally contrast, between two colors that\n * don't have a background / foreground relationship or a contrast guarantee.\n */\nexport class ToneDeltaPair {\n /**\n * Documents a constraint in tone distance between two DynamicColors.\n *\n * The polarity is an adjective that describes \"A\", compared to \"B\".\n *\n * For instance, ToneDeltaPair(A, B, 15, 'darker', stayTogether) states that\n * A's tone should be at least 15 darker than B's.\n *\n * 'nearer' and 'farther' describes closeness to the surface roles. For\n * instance, ToneDeltaPair(A, B, 10, 'nearer', stayTogether) states that A\n * should be 10 lighter than B in light mode, and 10 darker than B in dark\n * mode.\n *\n * @param roleA The first role in a pair.\n * @param roleB The second role in a pair.\n * @param delta Required difference between tones. Absolute value, negative\n * values have undefined behavior.\n * @param polarity The relative relation between tones of roleA and roleB,\n * as described above.\n * @param stayTogether Whether these two roles should stay on the same side of\n * the \"awkward zone\" (T50-59). This is necessary for certain cases where\n * one role has two backgrounds.\n */\n constructor(roleA, roleB, delta, polarity, stayTogether) {\n this.roleA = roleA;\n this.roleB = roleB;\n this.delta = delta;\n this.polarity = polarity;\n this.stayTogether = stayTogether;\n }\n}\n//# sourceMappingURL=tone_delta_pair.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Set of themes supported by Dynamic Color.\n * Instantiate the corresponding subclass, ex. SchemeTonalSpot, to create\n * colors corresponding to the theme.\n */\nexport var Variant;\n(function (Variant) {\n Variant[Variant[\"MONOCHROME\"] = 0] = \"MONOCHROME\";\n Variant[Variant[\"NEUTRAL\"] = 1] = \"NEUTRAL\";\n Variant[Variant[\"TONAL_SPOT\"] = 2] = \"TONAL_SPOT\";\n Variant[Variant[\"VIBRANT\"] = 3] = \"VIBRANT\";\n Variant[Variant[\"EXPRESSIVE\"] = 4] = \"EXPRESSIVE\";\n Variant[Variant[\"FIDELITY\"] = 5] = \"FIDELITY\";\n Variant[Variant[\"CONTENT\"] = 6] = \"CONTENT\";\n Variant[Variant[\"RAINBOW\"] = 7] = \"RAINBOW\";\n Variant[Variant[\"FRUIT_SALAD\"] = 8] = \"FRUIT_SALAD\";\n})(Variant || (Variant = {}));\n//# sourceMappingURL=variant.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DislikeAnalyzer } from '../dislike/dislike_analyzer.js';\nimport { Hct } from '../hct/hct.js';\nimport { ContrastCurve } from './contrast_curve.js';\nimport { DynamicColor } from './dynamic_color.js';\nimport { ToneDeltaPair } from './tone_delta_pair.js';\nimport { Variant } from './variant.js';\nfunction isFidelity(scheme) {\n return scheme.variant === Variant.FIDELITY ||\n scheme.variant === Variant.CONTENT;\n}\nfunction isMonochrome(scheme) {\n return scheme.variant === Variant.MONOCHROME;\n}\nfunction findDesiredChromaByTone(hue, chroma, tone, byDecreasingTone) {\n let answer = tone;\n let closestToChroma = Hct.from(hue, chroma, tone);\n if (closestToChroma.chroma < chroma) {\n let chromaPeak = closestToChroma.chroma;\n while (closestToChroma.chroma < chroma) {\n answer += byDecreasingTone ? -1.0 : 1.0;\n const potentialSolution = Hct.from(hue, chroma, answer);\n if (chromaPeak > potentialSolution.chroma) {\n break;\n }\n if (Math.abs(potentialSolution.chroma - chroma) < 0.4) {\n break;\n }\n const potentialDelta = Math.abs(potentialSolution.chroma - chroma);\n const currentDelta = Math.abs(closestToChroma.chroma - chroma);\n if (potentialDelta < currentDelta) {\n closestToChroma = potentialSolution;\n }\n chromaPeak = Math.max(chromaPeak, potentialSolution.chroma);\n }\n }\n return answer;\n}\n/**\n * DynamicColors for the colors in the Material Design system.\n */\n// Material Color Utilities namespaces the various utilities it provides.\n// tslint:disable-next-line:class-as-namespace\nexport class MaterialDynamicColors {\n static highestSurface(s) {\n return s.isDark ? MaterialDynamicColors.surfaceBright :\n MaterialDynamicColors.surfaceDim;\n }\n}\nMaterialDynamicColors.contentAccentToneDelta = 15.0;\nMaterialDynamicColors.primaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'primary_palette_key_color',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.primaryPalette.keyColor.tone,\n});\nMaterialDynamicColors.secondaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'secondary_palette_key_color',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.secondaryPalette.keyColor.tone,\n});\nMaterialDynamicColors.tertiaryPaletteKeyColor = DynamicColor.fromPalette({\n name: 'tertiary_palette_key_color',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => s.tertiaryPalette.keyColor.tone,\n});\nMaterialDynamicColors.neutralPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_palette_key_color',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.neutralPalette.keyColor.tone,\n});\nMaterialDynamicColors.neutralVariantPaletteKeyColor = DynamicColor.fromPalette({\n name: 'neutral_variant_palette_key_color',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.neutralVariantPalette.keyColor.tone,\n});\nMaterialDynamicColors.background = DynamicColor.fromPalette({\n name: 'background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n});\nMaterialDynamicColors.onBackground = DynamicColor.fromPalette({\n name: 'on_background',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.background,\n contrastCurve: new ContrastCurve(3, 3, 4.5, 7),\n});\nMaterialDynamicColors.surface = DynamicColor.fromPalette({\n name: 'surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : 98,\n isBackground: true,\n});\nMaterialDynamicColors.surfaceDim = DynamicColor.fromPalette({\n name: 'surface_dim',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 6 : new ContrastCurve(87, 87, 80, 75).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceBright = DynamicColor.fromPalette({\n name: 'surface_bright',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? new ContrastCurve(24, 24, 29, 34).get(s.contrastLevel) : 98,\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerLowest = DynamicColor.fromPalette({\n name: 'surface_container_lowest',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? new ContrastCurve(4, 4, 2, 0).get(s.contrastLevel) : 100,\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerLow = DynamicColor.fromPalette({\n name: 'surface_container_low',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(10, 10, 11, 12).get(s.contrastLevel) :\n new ContrastCurve(96, 96, 96, 95).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainer = DynamicColor.fromPalette({\n name: 'surface_container',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(12, 12, 16, 20).get(s.contrastLevel) :\n new ContrastCurve(94, 94, 92, 90).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerHigh = DynamicColor.fromPalette({\n name: 'surface_container_high',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(17, 17, 21, 25).get(s.contrastLevel) :\n new ContrastCurve(92, 92, 88, 85).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.surfaceContainerHighest = DynamicColor.fromPalette({\n name: 'surface_container_highest',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ?\n new ContrastCurve(22, 22, 26, 30).get(s.contrastLevel) :\n new ContrastCurve(90, 90, 84, 80).get(s.contrastLevel),\n isBackground: true,\n});\nMaterialDynamicColors.onSurface = DynamicColor.fromPalette({\n name: 'on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 10,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.surfaceVariant = DynamicColor.fromPalette({\n name: 'surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n});\nMaterialDynamicColors.onSurfaceVariant = DynamicColor.fromPalette({\n name: 'on_surface_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 80 : 30,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.inverseSurface = DynamicColor.fromPalette({\n name: 'inverse_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 90 : 20,\n});\nMaterialDynamicColors.inverseOnSurface = DynamicColor.fromPalette({\n name: 'inverse_on_surface',\n palette: (s) => s.neutralPalette,\n tone: (s) => s.isDark ? 20 : 95,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.outline = DynamicColor.fromPalette({\n name: 'outline',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 60 : 50,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1.5, 3, 4.5, 7),\n});\nMaterialDynamicColors.outlineVariant = DynamicColor.fromPalette({\n name: 'outline_variant',\n palette: (s) => s.neutralVariantPalette,\n tone: (s) => s.isDark ? 30 : 80,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n});\nMaterialDynamicColors.shadow = DynamicColor.fromPalette({\n name: 'shadow',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n});\nMaterialDynamicColors.scrim = DynamicColor.fromPalette({\n name: 'scrim',\n palette: (s) => s.neutralPalette,\n tone: (s) => 0,\n});\nMaterialDynamicColors.surfaceTint = DynamicColor.fromPalette({\n name: 'surface_tint',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n});\nMaterialDynamicColors.primary = DynamicColor.fromPalette({\n name: 'primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 100 : 0;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onPrimary = DynamicColor.fromPalette({\n name: 'on_primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.primary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.primaryContainer = DynamicColor.fromPalette({\n name: 'primary_container',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isFidelity(s)) {\n return s.sourceColorHct.tone;\n }\n if (isMonochrome(s)) {\n return s.isDark ? 85 : 25;\n }\n return s.isDark ? 30 : 90;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onPrimaryContainer = DynamicColor.fromPalette({\n name: 'on_primary_container',\n palette: (s) => s.primaryPalette,\n tone: (s) => {\n if (isFidelity(s)) {\n return DynamicColor.foregroundTone(MaterialDynamicColors.primaryContainer.tone(s), 4.5);\n }\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.primaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.inversePrimary = DynamicColor.fromPalette({\n name: 'inverse_primary',\n palette: (s) => s.primaryPalette,\n tone: (s) => s.isDark ? 40 : 80,\n background: (s) => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n});\nMaterialDynamicColors.secondary = DynamicColor.fromPalette({\n name: 'secondary',\n palette: (s) => s.secondaryPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onSecondary = DynamicColor.fromPalette({\n name: 'on_secondary',\n palette: (s) => s.secondaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 100;\n }\n else {\n return s.isDark ? 20 : 100;\n }\n },\n background: (s) => MaterialDynamicColors.secondary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.secondaryContainer = DynamicColor.fromPalette({\n name: 'secondary_container',\n palette: (s) => s.secondaryPalette,\n tone: (s) => {\n const initialTone = s.isDark ? 30 : 90;\n if (isMonochrome(s)) {\n return s.isDark ? 30 : 85;\n }\n if (!isFidelity(s)) {\n return initialTone;\n }\n return findDesiredChromaByTone(s.secondaryPalette.hue, s.secondaryPalette.chroma, initialTone, s.isDark ? false : true);\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onSecondaryContainer = DynamicColor.fromPalette({\n name: 'on_secondary_container',\n palette: (s) => s.secondaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(MaterialDynamicColors.secondaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.secondaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.tertiary = DynamicColor.fromPalette({\n name: 'tertiary',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 25;\n }\n return s.isDark ? 80 : 40;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onTertiary = DynamicColor.fromPalette({\n name: 'on_tertiary',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 10 : 90;\n }\n return s.isDark ? 20 : 100;\n },\n background: (s) => MaterialDynamicColors.tertiary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.tertiaryContainer = DynamicColor.fromPalette({\n name: 'tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 60 : 49;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 30 : 90;\n }\n const proposedHct = s.tertiaryPalette.getHct(s.sourceColorHct.tone);\n return DislikeAnalyzer.fixIfDisliked(proposedHct).tone;\n },\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 10, 'nearer', false),\n});\nMaterialDynamicColors.onTertiaryContainer = DynamicColor.fromPalette({\n name: 'on_tertiary_container',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 0 : 100;\n }\n if (!isFidelity(s)) {\n return s.isDark ? 90 : 30;\n }\n return DynamicColor.foregroundTone(MaterialDynamicColors.tertiaryContainer.tone(s), 4.5);\n },\n background: (s) => MaterialDynamicColors.tertiaryContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.error = DynamicColor.fromPalette({\n name: 'error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 80 : 40,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 7),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10, 'nearer', false),\n});\nMaterialDynamicColors.onError = DynamicColor.fromPalette({\n name: 'on_error',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 20 : 100,\n background: (s) => MaterialDynamicColors.error,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.errorContainer = DynamicColor.fromPalette({\n name: 'error_container',\n palette: (s) => s.errorPalette,\n tone: (s) => s.isDark ? 30 : 90,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10, 'nearer', false),\n});\nMaterialDynamicColors.onErrorContainer = DynamicColor.fromPalette({\n name: 'on_error_container',\n palette: (s) => s.errorPalette,\n tone: (s) => {\n if (isMonochrome(s)) {\n return s.isDark ? 90 : 10;\n }\n return s.isDark ? 90 : 30;\n },\n background: (s) => MaterialDynamicColors.errorContainer,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.primaryFixed = DynamicColor.fromPalette({\n name: 'primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.primaryFixedDim = DynamicColor.fromPalette({\n name: 'primary_fixed_dim',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.onPrimaryFixed = DynamicColor.fromPalette({\n name: 'on_primary_fixed',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.onPrimaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_primary_fixed_variant',\n palette: (s) => s.primaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.primaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.secondaryFixed = DynamicColor.fromPalette({\n name: 'secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 80.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.secondaryFixedDim = DynamicColor.fromPalette({\n name: 'secondary_fixed_dim',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 70.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.onSecondaryFixed = DynamicColor.fromPalette({\n name: 'on_secondary_fixed',\n palette: (s) => s.secondaryPalette,\n tone: (s) => 10.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.onSecondaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_secondary_fixed_variant',\n palette: (s) => s.secondaryPalette,\n tone: (s) => isMonochrome(s) ? 25.0 : 30.0,\n background: (s) => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\nMaterialDynamicColors.tertiaryFixed = DynamicColor.fromPalette({\n name: 'tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 40.0 : 90.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.tertiaryFixedDim = DynamicColor.fromPalette({\n name: 'tertiary_fixed_dim',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 30.0 : 80.0,\n isBackground: true,\n background: (s) => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 4.5),\n toneDeltaPair: (s) => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, 'lighter', true),\n});\nMaterialDynamicColors.onTertiaryFixed = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 100.0 : 10.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21),\n});\nMaterialDynamicColors.onTertiaryFixedVariant = DynamicColor.fromPalette({\n name: 'on_tertiary_fixed_variant',\n palette: (s) => s.tertiaryPalette,\n tone: (s) => isMonochrome(s) ? 90.0 : 30.0,\n background: (s) => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: (s) => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n});\n//# sourceMappingURL=material_dynamic_colors.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Hct } from '../hct/hct.js';\nimport { TonalPalette } from './tonal_palette.js';\n/**\n * An intermediate concept between the key color for a UI theme, and a full\n * color scheme. 5 sets of tones are generated, all except one use the same hue\n * as the key color, and all vary in chroma.\n */\nexport class CorePalette {\n /**\n * @param argb ARGB representation of a color\n */\n static of(argb) {\n return new CorePalette(argb, false);\n }\n /**\n * @param argb ARGB representation of a color\n */\n static contentOf(argb) {\n return new CorePalette(argb, true);\n }\n /**\n * Create a [CorePalette] from a set of colors\n */\n static fromColors(colors) {\n return CorePalette.createPaletteFromColors(false, colors);\n }\n /**\n * Create a content [CorePalette] from a set of colors\n */\n static contentFromColors(colors) {\n return CorePalette.createPaletteFromColors(true, colors);\n }\n static createPaletteFromColors(content, colors) {\n const palette = new CorePalette(colors.primary, content);\n if (colors.secondary) {\n const p = new CorePalette(colors.secondary, content);\n palette.a2 = p.a1;\n }\n if (colors.tertiary) {\n const p = new CorePalette(colors.tertiary, content);\n palette.a3 = p.a1;\n }\n if (colors.error) {\n const p = new CorePalette(colors.error, content);\n palette.error = p.a1;\n }\n if (colors.neutral) {\n const p = new CorePalette(colors.neutral, content);\n palette.n1 = p.n1;\n }\n if (colors.neutralVariant) {\n const p = new CorePalette(colors.neutralVariant, content);\n palette.n2 = p.n2;\n }\n return palette;\n }\n constructor(argb, isContent) {\n const hct = Hct.fromInt(argb);\n const hue = hct.hue;\n const chroma = hct.chroma;\n if (isContent) {\n this.a1 = TonalPalette.fromHueAndChroma(hue, chroma);\n this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2);\n this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4));\n this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8));\n }\n else {\n this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma));\n this.a2 = TonalPalette.fromHueAndChroma(hue, 16);\n this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24);\n this.n1 = TonalPalette.fromHueAndChroma(hue, 4);\n this.n2 = TonalPalette.fromHueAndChroma(hue, 8);\n }\n this.error = TonalPalette.fromHueAndChroma(25, 84);\n }\n}\n//# sourceMappingURL=core_palette.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// This file is automatically generated. Do not modify it.\nimport { CorePalette } from '../palettes/core_palette.js';\n/**\n * DEPRECATED. The `Scheme` class is deprecated in favor of `DynamicScheme`.\n * Please see\n * https://github.com/material-foundation/material-color-utilities/blob/main/make_schemes.md\n * for migration guidance.\n *\n * Represents a Material color scheme, a mapping of color roles to colors.\n */\nexport class Scheme {\n get primary() {\n return this.props.primary;\n }\n get onPrimary() {\n return this.props.onPrimary;\n }\n get primaryContainer() {\n return this.props.primaryContainer;\n }\n get onPrimaryContainer() {\n return this.props.onPrimaryContainer;\n }\n get secondary() {\n return this.props.secondary;\n }\n get onSecondary() {\n return this.props.onSecondary;\n }\n get secondaryContainer() {\n return this.props.secondaryContainer;\n }\n get onSecondaryContainer() {\n return this.props.onSecondaryContainer;\n }\n get tertiary() {\n return this.props.tertiary;\n }\n get onTertiary() {\n return this.props.onTertiary;\n }\n get tertiaryContainer() {\n return this.props.tertiaryContainer;\n }\n get onTertiaryContainer() {\n return this.props.onTertiaryContainer;\n }\n get error() {\n return this.props.error;\n }\n get onError() {\n return this.props.onError;\n }\n get errorContainer() {\n return this.props.errorContainer;\n }\n get onErrorContainer() {\n return this.props.onErrorContainer;\n }\n get background() {\n return this.props.background;\n }\n get onBackground() {\n return this.props.onBackground;\n }\n get surface() {\n return this.props.surface;\n }\n get onSurface() {\n return this.props.onSurface;\n }\n get surfaceVariant() {\n return this.props.surfaceVariant;\n }\n get onSurfaceVariant() {\n return this.props.onSurfaceVariant;\n }\n get outline() {\n return this.props.outline;\n }\n get outlineVariant() {\n return this.props.outlineVariant;\n }\n get shadow() {\n return this.props.shadow;\n }\n get scrim() {\n return this.props.scrim;\n }\n get inverseSurface() {\n return this.props.inverseSurface;\n }\n get inverseOnSurface() {\n return this.props.inverseOnSurface;\n }\n get inversePrimary() {\n return this.props.inversePrimary;\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material color scheme, based on the color's hue.\n */\n static light(argb) {\n return Scheme.lightFromCorePalette(CorePalette.of(argb));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material color scheme, based on the color's hue.\n */\n static dark(argb) {\n return Scheme.darkFromCorePalette(CorePalette.of(argb));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Light Material content color scheme, based on the color's hue.\n */\n static lightContent(argb) {\n return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));\n }\n /**\n * @param argb ARGB representation of a color.\n * @return Dark Material content color scheme, based on the color's hue.\n */\n static darkContent(argb) {\n return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));\n }\n /**\n * Light scheme from core palette\n */\n static lightFromCorePalette(core) {\n return new Scheme({\n primary: core.a1.tone(40),\n onPrimary: core.a1.tone(100),\n primaryContainer: core.a1.tone(90),\n onPrimaryContainer: core.a1.tone(10),\n secondary: core.a2.tone(40),\n onSecondary: core.a2.tone(100),\n secondaryContainer: core.a2.tone(90),\n onSecondaryContainer: core.a2.tone(10),\n tertiary: core.a3.tone(40),\n onTertiary: core.a3.tone(100),\n tertiaryContainer: core.a3.tone(90),\n onTertiaryContainer: core.a3.tone(10),\n error: core.error.tone(40),\n onError: core.error.tone(100),\n errorContainer: core.error.tone(90),\n onErrorContainer: core.error.tone(10),\n background: core.n1.tone(99),\n onBackground: core.n1.tone(10),\n surface: core.n1.tone(99),\n onSurface: core.n1.tone(10),\n surfaceVariant: core.n2.tone(90),\n onSurfaceVariant: core.n2.tone(30),\n outline: core.n2.tone(50),\n outlineVariant: core.n2.tone(80),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(20),\n inverseOnSurface: core.n1.tone(95),\n inversePrimary: core.a1.tone(80)\n });\n }\n /**\n * Dark scheme from core palette\n */\n static darkFromCorePalette(core) {\n return new Scheme({\n primary: core.a1.tone(80),\n onPrimary: core.a1.tone(20),\n primaryContainer: core.a1.tone(30),\n onPrimaryContainer: core.a1.tone(90),\n secondary: core.a2.tone(80),\n onSecondary: core.a2.tone(20),\n secondaryContainer: core.a2.tone(30),\n onSecondaryContainer: core.a2.tone(90),\n tertiary: core.a3.tone(80),\n onTertiary: core.a3.tone(20),\n tertiaryContainer: core.a3.tone(30),\n onTertiaryContainer: core.a3.tone(90),\n error: core.error.tone(80),\n onError: core.error.tone(20),\n errorContainer: core.error.tone(30),\n onErrorContainer: core.error.tone(80),\n background: core.n1.tone(10),\n onBackground: core.n1.tone(90),\n surface: core.n1.tone(10),\n onSurface: core.n1.tone(90),\n surfaceVariant: core.n2.tone(30),\n onSurfaceVariant: core.n2.tone(80),\n outline: core.n2.tone(60),\n outlineVariant: core.n2.tone(30),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(90),\n inverseOnSurface: core.n1.tone(20),\n inversePrimary: core.a1.tone(40)\n });\n }\n constructor(props) {\n this.props = props;\n }\n toJSON() {\n return {\n ...this.props\n };\n }\n}\n//# sourceMappingURL=scheme.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as colorUtils from './color_utils.js';\n/**\n * Utility methods for hexadecimal representations of colors.\n */\n/**\n * @param argb ARGB representation of a color.\n * @return Hex string representing color, ex. #ff0000 for red.\n */\nexport function hexFromArgb(argb) {\n const r = colorUtils.redFromArgb(argb);\n const g = colorUtils.greenFromArgb(argb);\n const b = colorUtils.blueFromArgb(argb);\n const outParts = [r.toString(16), g.toString(16), b.toString(16)];\n // Pad single-digit output values\n for (const [i, part] of outParts.entries()) {\n if (part.length === 1) {\n outParts[i] = '0' + part;\n }\n }\n return '#' + outParts.join('');\n}\n/**\n * @param hex String representing color as hex code. Accepts strings with or\n * without leading #, and string representing the color using 3, 6, or 8\n * hex characters.\n * @return ARGB representation of color.\n */\nexport function argbFromHex(hex) {\n hex = hex.replace('#', '');\n const isThree = hex.length === 3;\n const isSix = hex.length === 6;\n const isEight = hex.length === 8;\n if (!isThree && !isSix && !isEight) {\n throw new Error('unexpected hex ' + hex);\n }\n let r = 0;\n let g = 0;\n let b = 0;\n if (isThree) {\n r = parseIntHex(hex.slice(0, 1).repeat(2));\n g = parseIntHex(hex.slice(1, 2).repeat(2));\n b = parseIntHex(hex.slice(2, 3).repeat(2));\n }\n else if (isSix) {\n r = parseIntHex(hex.slice(0, 2));\n g = parseIntHex(hex.slice(2, 4));\n b = parseIntHex(hex.slice(4, 6));\n }\n else if (isEight) {\n r = parseIntHex(hex.slice(2, 4));\n g = parseIntHex(hex.slice(4, 6));\n b = parseIntHex(hex.slice(6, 8));\n }\n return (((255 << 24) | ((r & 0x0ff) << 16) | ((g & 0x0ff) << 8) | (b & 0x0ff)) >>>\n 0);\n}\nfunction parseIntHex(value) {\n // tslint:disable-next-line:ban\n return parseInt(value, 16);\n}\n//# sourceMappingURL=string_utils.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Blend } from '../blend/blend.js';\nimport { CorePalette } from '../palettes/core_palette.js';\nimport { Scheme } from '../scheme/scheme.js';\nimport { sourceColorFromImage } from './image_utils.js';\nimport { hexFromArgb } from './string_utils.js';\n/**\n * Generate a theme from a source color\n *\n * @param source Source color\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport function themeFromSourceColor(source, customColors = []) {\n const palette = CorePalette.of(source);\n return {\n source,\n schemes: {\n light: Scheme.light(source),\n dark: Scheme.dark(source),\n },\n palettes: {\n primary: palette.a1,\n secondary: palette.a2,\n tertiary: palette.a3,\n neutral: palette.n1,\n neutralVariant: palette.n2,\n error: palette.error,\n },\n customColors: customColors.map((c) => customColor(source, c)),\n };\n}\n/**\n * Generate a theme from an image source\n *\n * @param image Image element\n * @param customColors Array of custom colors\n * @return Theme object\n */\nexport async function themeFromImage(image, customColors = []) {\n const source = await sourceColorFromImage(image);\n return themeFromSourceColor(source, customColors);\n}\n/**\n * Generate custom color group from source and target color\n *\n * @param source Source color\n * @param color Custom color\n * @return Custom color group\n *\n * @link https://m3.material.io/styles/color/the-color-system/color-roles\n */\nexport function customColor(source, color) {\n let value = color.value;\n const from = value;\n const to = source;\n if (color.blend) {\n value = Blend.harmonize(from, to);\n }\n const palette = CorePalette.of(value);\n const tones = palette.a1;\n return {\n color,\n value,\n light: {\n color: tones.tone(40),\n onColor: tones.tone(100),\n colorContainer: tones.tone(90),\n onColorContainer: tones.tone(10),\n },\n dark: {\n color: tones.tone(80),\n onColor: tones.tone(20),\n colorContainer: tones.tone(30),\n onColorContainer: tones.tone(90),\n },\n };\n}\n/**\n * Apply a theme to an element\n *\n * @param theme Theme object\n * @param options Options\n */\nexport function applyTheme(theme, options) {\n const target = options?.target || document.body;\n const isDark = options?.dark ?? false;\n const scheme = isDark ? theme.schemes.dark : theme.schemes.light;\n setSchemeProperties(target, scheme);\n if (options?.brightnessSuffix) {\n setSchemeProperties(target, theme.schemes.dark, '-dark');\n setSchemeProperties(target, theme.schemes.light, '-light');\n }\n if (options?.paletteTones) {\n const tones = options?.paletteTones ?? [];\n for (const [key, palette] of Object.entries(theme.palettes)) {\n const paletteKey = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n for (const tone of tones) {\n const token = `--md-ref-palette-${paletteKey}-${paletteKey}${tone}`;\n const color = hexFromArgb(palette.tone(tone));\n target.style.setProperty(token, color);\n }\n }\n }\n}\nfunction setSchemeProperties(target, scheme, suffix = '') {\n for (const [key, value] of Object.entries(scheme.toJSON())) {\n const token = key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const color = hexFromArgb(value);\n target.style.setProperty(`--md-sys-color-${token}${suffix}`, color);\n }\n}\n//# sourceMappingURL=theme_utils.js.map","import { argbFromHex, Hct, hexFromArgb, Theme, TonalPalette } from '@material/material-color-utilities'\nimport { TSchmancyTheme } from './theme.interface'\n\n/**\n * Material Design 3 Theme Formatter\n * Generates complete M3 theme with all tonal values and design tokens\n * @see https://m3.material.io/styles/color/the-color-system\n */\n\n/**\n * Converts ARGB integer to hex string\n */\nfunction argbToHex(argb: number): string {\n\treturn hexFromArgb(argb)\n}\n\n/**\n * Creates a complete tonal palette from a source color\n */\nfunction createTonalPalette(sourceColor: number): Record<string, string> {\n\tconst hct = Hct.fromInt(sourceColor)\n\tconst palette = TonalPalette.fromHueAndChroma(hct.hue, hct.chroma)\n\n\treturn {\n\t\t'0': argbToHex(palette.tone(0)),\n\t\t'10': argbToHex(palette.tone(10)),\n\t\t'20': argbToHex(palette.tone(20)),\n\t\t'30': argbToHex(palette.tone(30)),\n\t\t'40': argbToHex(palette.tone(40)),\n\t\t'50': argbToHex(palette.tone(50)),\n\t\t'60': argbToHex(palette.tone(60)),\n\t\t'70': argbToHex(palette.tone(70)),\n\t\t'80': argbToHex(palette.tone(80)),\n\t\t'90': argbToHex(palette.tone(90)),\n\t\t'95': argbToHex(palette.tone(95)),\n\t\t'99': argbToHex(palette.tone(99)),\n\t\t'100': argbToHex(palette.tone(100)),\n\t}\n}\n\n/**\n * Generates a complete Material Design 3 theme\n * @param originalTheme The generated theme from Material Color Utilities\n * @param isDark Whether to generate a dark theme\n * @param extendedColors Optional extended colors (success, warning, info)\n */\nexport function formateTheme(\n\toriginalTheme: Theme,\n\tisDark = false,\n\textendedColors?: {\n\t\tsuccess?: number\n\t\twarning?: number\n\t\tinfo?: number\n\t}\n): Partial<TSchmancyTheme> {\n\tconst scheme = isDark ? originalTheme.schemes.dark : originalTheme.schemes.light\n\n\t// Generate complete tonal palettes\n\tconst primaryPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.primary.hue,\n\t\toriginalTheme.palettes.primary.chroma\n\t)\n\tconst secondaryPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.secondary.hue,\n\t\toriginalTheme.palettes.secondary.chroma\n\t)\n\tconst tertiaryPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.tertiary.hue,\n\t\toriginalTheme.palettes.tertiary.chroma\n\t)\n\tconst neutralPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.neutral.hue,\n\t\toriginalTheme.palettes.neutral.chroma\n\t)\n\tconst neutralVariantPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.neutralVariant.hue,\n\t\toriginalTheme.palettes.neutralVariant.chroma\n\t)\n\tconst errorPalette = TonalPalette.fromHueAndChroma(\n\t\toriginalTheme.palettes.error.hue,\n\t\toriginalTheme.palettes.error.chroma\n\t)\n\n\t// Generate extended color palettes\n\tconst successPalette = extendedColors?.success\n\t\t? createTonalPalette(extendedColors.success)\n\t\t: createTonalPalette(argbFromHex('#00C853')) // Green A700\n\n\tconst warningPalette = extendedColors?.warning\n\t\t? createTonalPalette(extendedColors.warning)\n\t\t: createTonalPalette(argbFromHex('#FFD600')) // Amber A700\n\n\tconst infoPalette = extendedColors?.info\n\t\t? createTonalPalette(extendedColors.info)\n\t\t: createTonalPalette(argbFromHex('#2979FF')) // Blue A400\n\n\t// M3 tone values for each color role in light/dark themes\n\tconst tones = {\n\t\tprimary: isDark ? 80 : 40,\n\t\tonPrimary: isDark ? 20 : 100,\n\t\tprimaryContainer: isDark ? 30 : 90,\n\t\tonPrimaryContainer: isDark ? 90 : 10,\n\t\tprimaryFixed: 90,\n\t\tprimaryFixedDim: 80,\n\t\tonPrimaryFixed: 10,\n\t\tonPrimaryFixedVariant: 30,\n\t\tinversePrimary: isDark ? 40 : 80,\n\n\t\tsecondary: isDark ? 80 : 40,\n\t\tonSecondary: isDark ? 20 : 100,\n\t\tsecondaryContainer: isDark ? 30 : 90,\n\t\tonSecondaryContainer: isDark ? 90 : 10,\n\t\tsecondaryFixed: 90,\n\t\tsecondaryFixedDim: 80,\n\t\tonSecondaryFixed: 10,\n\t\tonSecondaryFixedVariant: 30,\n\n\t\ttertiary: isDark ? 80 : 40,\n\t\tonTertiary: isDark ? 20 : 100,\n\t\ttertiaryContainer: isDark ? 30 : 90,\n\t\tonTertiaryContainer: isDark ? 90 : 10,\n\t\ttertiaryFixed: 90,\n\t\ttertiaryFixedDim: 80,\n\t\tonTertiaryFixed: 10,\n\t\tonTertiaryFixedVariant: 30,\n\n\t\terror: isDark ? 50 : 40,\n\t\tonError: isDark ? 100 : 100,\n\t\terrorContainer: isDark ? 30 : 90,\n\t\tonErrorContainer: isDark ? 90 : 10,\n\n\t\tsurface: isDark ? 6 : 98,\n\t\tsurfaceDim: isDark ? 6 : 87,\n\t\tsurfaceBright: isDark ? 24 : 98,\n\t\tsurfaceContainerLowest: isDark ? 4 : 100,\n\t\tsurfaceContainerLow: isDark ? 10 : 96,\n\t\tsurfaceContainer: isDark ? 12 : 94,\n\t\tsurfaceContainerHigh: isDark ? 17 : 92,\n\t\tsurfaceContainerHighest: isDark ? 22 : 90,\n\t\tonSurface: isDark ? 90 : 10,\n\t\tonSurfaceVariant: isDark ? 80 : 30,\n\t\tsurfaceTint: isDark ? 80 : 40,\n\t\tinverseSurface: isDark ? 90 : 20,\n\t\tinverseOnSurface: isDark ? 20 : 95,\n\n\t\toutline: isDark ? 60 : 50,\n\t\toutlineVariant: isDark ? 15 : 80,\n\t\tshadow: 0,\n\t\tscrim: 0,\n\t}\n\n\tconst newTheme: Partial<TSchmancyTheme> = {\n\t\tsys: {\n\t\t\tcolor: {\n\t\t\t\t// Neutral colors\n\t\t\t\tscrim: argbToHex(scheme.scrim),\n\t\t\t\toutline: argbToHex(neutralVariantPalette.tone(tones.outline)),\n\t\t\t\toutlineVariant: argbToHex(neutralVariantPalette.tone(tones.outlineVariant)),\n\t\t\t\tshadow: argbToHex(neutralPalette.tone(tones.shadow)),\n\n\t\t\t\t// Surface colors with complete tonal values\n\t\t\t\tsurface: {\n\t\t\t\t\tdefault: argbToHex(neutralPalette.tone(tones.surface)),\n\t\t\t\t\tdim: argbToHex(neutralPalette.tone(tones.surfaceDim)),\n\t\t\t\t\tbright: argbToHex(neutralPalette.tone(tones.surfaceBright)),\n\t\t\t\t\tcontainer: argbToHex(neutralPalette.tone(tones.surfaceContainer)),\n\t\t\t\t\tcontainerLow: argbToHex(neutralPalette.tone(tones.surfaceContainerLow)),\n\t\t\t\t\tcontainerLowest: argbToHex(neutralPalette.tone(tones.surfaceContainerLowest)),\n\t\t\t\t\tcontainerHigh: argbToHex(neutralPalette.tone(tones.surfaceContainerHigh)),\n\t\t\t\t\tcontainerHighest: argbToHex(neutralPalette.tone(tones.surfaceContainerHighest)),\n\t\t\t\t\ton: argbToHex(neutralPalette.tone(tones.onSurface)),\n\t\t\t\t\tonVariant: argbToHex(neutralVariantPalette.tone(tones.onSurfaceVariant)),\n\t\t\t\t\ttint: argbToHex(primaryPalette.tone(tones.surfaceTint)),\n\t\t\t\t\tinverse: argbToHex(neutralPalette.tone(tones.inverseSurface)),\n\t\t\t\t\tinverseOn: argbToHex(neutralPalette.tone(tones.inverseOnSurface)),\n\t\t\t\t\t// Deprecated mappings for backward compatibility\n\t\t\t\t\tlow: argbToHex(neutralPalette.tone(tones.surfaceContainerLow)),\n\t\t\t\t\thigh: argbToHex(neutralPalette.tone(tones.surfaceContainerHigh)),\n\t\t\t\t\thighest: argbToHex(neutralPalette.tone(tones.surfaceContainerHighest)),\n\t\t\t\t\tlowest: argbToHex(neutralPalette.tone(tones.surfaceContainerLowest)),\n\t\t\t\t},\n\n\t\t\t\t// Primary color roles with fixed variants\n\t\t\t\tprimary: {\n\t\t\t\t\tdefault: argbToHex(primaryPalette.tone(tones.primary)),\n\t\t\t\t\ton: argbToHex(primaryPalette.tone(tones.onPrimary)),\n\t\t\t\t\tcontainer: argbToHex(primaryPalette.tone(tones.primaryContainer)),\n\t\t\t\t\tonContainer: argbToHex(primaryPalette.tone(tones.onPrimaryContainer)),\n\t\t\t\t\tfixed: argbToHex(primaryPalette.tone(tones.primaryFixed)),\n\t\t\t\t\tfixedDim: argbToHex(primaryPalette.tone(tones.primaryFixedDim)),\n\t\t\t\t\tonFixed: argbToHex(primaryPalette.tone(tones.onPrimaryFixed)),\n\t\t\t\t\tonFixedVariant: argbToHex(primaryPalette.tone(tones.onPrimaryFixedVariant)),\n\t\t\t\t\tinverse: argbToHex(primaryPalette.tone(tones.inversePrimary)),\n\t\t\t\t},\n\n\t\t\t\t// Secondary color roles with fixed variants\n\t\t\t\tsecondary: {\n\t\t\t\t\tdefault: argbToHex(secondaryPalette.tone(tones.secondary)),\n\t\t\t\t\ton: argbToHex(secondaryPalette.tone(tones.onSecondary)),\n\t\t\t\t\tcontainer: argbToHex(secondaryPalette.tone(tones.secondaryContainer)),\n\t\t\t\t\tonContainer: argbToHex(secondaryPalette.tone(tones.onSecondaryContainer)),\n\t\t\t\t\tfixed: argbToHex(secondaryPalette.tone(tones.secondaryFixed)),\n\t\t\t\t\tfixedDim: argbToHex(secondaryPalette.tone(tones.secondaryFixedDim)),\n\t\t\t\t\tonFixed: argbToHex(secondaryPalette.tone(tones.onSecondaryFixed)),\n\t\t\t\t\tonFixedVariant: argbToHex(secondaryPalette.tone(tones.onSecondaryFixedVariant)),\n\t\t\t\t},\n\n\t\t\t\t// Tertiary color roles with fixed variants\n\t\t\t\ttertiary: {\n\t\t\t\t\tdefault: argbToHex(tertiaryPalette.tone(tones.tertiary)),\n\t\t\t\t\ton: argbToHex(tertiaryPalette.tone(tones.onTertiary)),\n\t\t\t\t\tcontainer: argbToHex(tertiaryPalette.tone(tones.tertiaryContainer)),\n\t\t\t\t\tonContainer: argbToHex(tertiaryPalette.tone(tones.onTertiaryContainer)),\n\t\t\t\t\tfixed: argbToHex(tertiaryPalette.tone(tones.tertiaryFixed)),\n\t\t\t\t\tfixedDim: argbToHex(tertiaryPalette.tone(tones.tertiaryFixedDim)),\n\t\t\t\t\tonFixed: argbToHex(tertiaryPalette.tone(tones.onTertiaryFixed)),\n\t\t\t\t\tonFixedVariant: argbToHex(tertiaryPalette.tone(tones.onTertiaryFixedVariant)),\n\t\t\t\t},\n\n\t\t\t\t// Error color roles\n\t\t\t\terror: {\n\t\t\t\t\tdefault: argbToHex(errorPalette.tone(tones.error)),\n\t\t\t\t\ton: argbToHex(errorPalette.tone(tones.onError)),\n\t\t\t\t\tcontainer: argbToHex(errorPalette.tone(tones.errorContainer)),\n\t\t\t\t\tonContainer: argbToHex(errorPalette.tone(tones.onErrorContainer)),\n\t\t\t\t},\n\n\t\t\t\t// Extended color roles - Success\n\t\t\t\tsuccess: {\n\t\t\t\t\tdefault: successPalette[isDark ? '80' : '40'],\n\t\t\t\t\ton: successPalette[isDark ? '20' : '100'],\n\t\t\t\t\tcontainer: successPalette[isDark ? '30' : '90'],\n\t\t\t\t\tonContainer: successPalette[isDark ? '90' : '10'],\n\t\t\t\t},\n\n\t\t\t\t// Extended color roles - Warning\n\t\t\t\twarning: {\n\t\t\t\t\tdefault: warningPalette[isDark ? '80' : '40'],\n\t\t\t\t\ton: warningPalette[isDark ? '20' : '100'],\n\t\t\t\t\tcontainer: warningPalette[isDark ? '30' : '90'],\n\t\t\t\t\tonContainer: warningPalette[isDark ? '90' : '10'],\n\t\t\t\t},\n\n\t\t\t\t// Extended color roles - Info\n\t\t\t\tinfo: {\n\t\t\t\t\tdefault: infoPalette[isDark ? '80' : '40'],\n\t\t\t\t\ton: infoPalette[isDark ? '20' : '100'],\n\t\t\t\t\tcontainer: infoPalette[isDark ? '30' : '90'],\n\t\t\t\t\tonContainer: infoPalette[isDark ? '90' : '10'],\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Typography System values (will be properly set in CSS)\n\t\t\ttypography: {\n\t\t\t\tdisplay: {\n\t\t\t\t\tlarge: 'display-large',\n\t\t\t\t\tmedium: 'display-medium',\n\t\t\t\t\tsmall: 'display-small',\n\t\t\t\t},\n\t\t\t\theadline: {\n\t\t\t\t\tlarge: 'headline-large',\n\t\t\t\t\tmedium: 'headline-medium',\n\t\t\t\t\tsmall: 'headline-small',\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\tlarge: 'title-large',\n\t\t\t\t\tmedium: 'title-medium',\n\t\t\t\t\tsmall: 'title-small',\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\tlarge: 'body-large',\n\t\t\t\t\tmedium: 'body-medium',\n\t\t\t\t\tsmall: 'body-small',\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tlarge: 'label-large',\n\t\t\t\t\tmedium: 'label-medium',\n\t\t\t\t\tsmall: 'label-small',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Shape System\n\t\t\tshape: {\n\t\t\t\tcorner: {\n\t\t\t\t\tnone: '0',\n\t\t\t\t\textraSmall: '4px',\n\t\t\t\t\tsmall: '8px',\n\t\t\t\t\tmedium: '12px',\n\t\t\t\t\tlarge: '16px',\n\t\t\t\t\textraLarge: '28px',\n\t\t\t\t\tfull: '9999px',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Elevation System with tinted shadows\n\t\t\televation: {\n\t\t\t\t0: '0 0 0 0 rgba(0, 0, 0, 0)',\n\t\t\t\t1: `0px 1px 2px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 1px 3px 1px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t2: `0px 1px 2px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 2px 6px 2px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t3: `0px 1px 3px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 4px 8px 3px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t4: `0px 2px 3px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 6px 10px 4px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t\t5: `0px 4px 4px rgba(0, 0, 0, ${isDark ? '0.3' : '0.15'}), 0px 8px 12px 6px rgba(0, 0, 0, ${isDark ? '0.15' : '0.1'})`,\n\t\t\t},\n\n\t\t\t// M3 Motion System\n\t\t\tmotion: {\n\t\t\t\teasing: {\n\t\t\t\t\temphasized: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\t\t\temphasizedDecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',\n\t\t\t\t\temphasizedAccelerate: 'cubic-bezier(0.3, 0.0, 0.8, 0.15)',\n\t\t\t\t\tstandard: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\t\t\tstandardDecelerate: 'cubic-bezier(0, 0, 0, 1)',\n\t\t\t\t\tstandardAccelerate: 'cubic-bezier(0.3, 0, 1, 1)',\n\t\t\t\t\tlegacy: 'cubic-bezier(0.4, 0, 0.2, 1)',\n\t\t\t\t\tlinear: 'linear',\n\t\t\t\t},\n\t\t\t\tduration: {\n\t\t\t\t\tshort1: '50ms',\n\t\t\t\t\tshort2: '100ms',\n\t\t\t\t\tshort3: '150ms',\n\t\t\t\t\tshort4: '200ms',\n\t\t\t\t\tmedium1: '250ms',\n\t\t\t\t\tmedium2: '300ms',\n\t\t\t\t\tmedium3: '350ms',\n\t\t\t\t\tmedium4: '400ms',\n\t\t\t\t\tlong1: '450ms',\n\t\t\t\t\tlong2: '500ms',\n\t\t\t\t\tlong3: '550ms',\n\t\t\t\t\tlong4: '600ms',\n\t\t\t\t\textraLong1: '700ms',\n\t\t\t\t\textraLong2: '800ms',\n\t\t\t\t\textraLong3: '900ms',\n\t\t\t\t\textraLong4: '1000ms',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 State Layers\n\t\t\tstate: {\n\t\t\t\topacity: {\n\t\t\t\t\thover: '0.08',\n\t\t\t\t\tfocus: '0.12',\n\t\t\t\t\tpressed: '0.12',\n\t\t\t\t\tdragged: '0.16',\n\t\t\t\t\tdisabled: '0.38',\n\t\t\t\t\tdisabledContainer: '0.12',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// M3 Spacing System (4dp grid)\n\t\t\tspacing: {\n\t\t\t\t0: '0',\n\t\t\t\t1: '4px',\n\t\t\t\t2: '8px',\n\t\t\t\t3: '12px',\n\t\t\t\t4: '16px',\n\t\t\t\t5: '20px',\n\t\t\t\t6: '24px',\n\t\t\t\t7: '28px',\n\t\t\t\t8: '32px',\n\t\t\t\t9: '36px',\n\t\t\t\t10: '40px',\n\t\t\t\t11: '44px',\n\t\t\t\t12: '48px',\n\t\t\t},\n\n\t\t\t// Legacy outline for backward compatibility\n\t\t\toutline: {\n\t\t\t\t1: '1px',\n\t\t\t},\n\t\t},\n\n\t\t// Reference palette - complete tonal values\n\t\tref: {\n\t\t\tpalette: {\n\t\t\t\tprimary: createTonalPalette(primaryPalette.tone(40)) as any,\n\t\t\t\tsecondary: createTonalPalette(secondaryPalette.tone(40)) as any,\n\t\t\t\ttertiary: createTonalPalette(tertiaryPalette.tone(40)) as any,\n\t\t\t\tneutral: createTonalPalette(neutralPalette.tone(40)) as any,\n\t\t\t\tneutralVariant: createTonalPalette(neutralVariantPalette.tone(40)) as any,\n\t\t\t\terror: createTonalPalette(errorPalette.tone(40)) as any,\n\t\t\t},\n\t\t},\n\t}\n\n\treturn newTheme\n}\n\n/**\n * Backward compatibility wrapper for the old API\n */\nexport function createLightTonalPaletteFromBaseColor(hue: number, chroma: number) {\n\tconst tonalPalette = TonalPalette.fromHueAndChroma(hue, chroma)\n\treturn {\n\t\tcLowest: tonalPalette.tone(100),\n\t\tcLow: tonalPalette.tone(96),\n\t\tc: tonalPalette.tone(94),\n\t\tcHigh: tonalPalette.tone(92),\n\t\tcHighest: tonalPalette.tone(90),\n\t\tsDim: tonalPalette.tone(87),\n\t\ts: tonalPalette.tone(98),\n\t\tsBright: tonalPalette.tone(100),\n\t}\n}\n\nexport function createDarkTonalPaletteFromBaseColor(hue: number, chroma: number) {\n\tconst tonalPalette = TonalPalette.fromHueAndChroma(hue, chroma)\n\treturn {\n\t\tcLowest: tonalPalette.tone(4),\n\t\tcLow: tonalPalette.tone(10),\n\t\tc: tonalPalette.tone(12),\n\t\tcHigh: tonalPalette.tone(17),\n\t\tcHighest: tonalPalette.tone(22),\n\t\tsDim: tonalPalette.tone(6),\n\t\ts: tonalPalette.tone(6),\n\t\tsBright: tonalPalette.tone(24),\n\t}\n}\n","import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { createContext } from '../store'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Single context for all theme settings\nconst ThemeContext = createContext<ThemeSettings>(\n { scheme: 'auto', color: '#6200ee' },\n 'local',\n 'schmancy-theme-settings'\n)\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n// Export singleton instance\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme","import { createContext } from '@lit/context'\nimport { TSchmancyTheme } from './theme.interface'\n\n/**\n * Lit Context for sharing theme configuration across components.\\n *\n * This context is provided by SchmancyThemeComponent and can be consumed\n * by any child component to access the current theme configuration.\n *\n * @type {Context<Partial<TSchmancyTheme>>}\n *\n * @example\n * ```typescript\n * import { consume } from '@lit/context'\n * import { themeContext } from '@schmancy/theme'\n *\n * class MyComponent extends LitElement {\n * @consume({ context: themeContext })\n * theme?: Partial<TSchmancyTheme>\n *\n * render() {\n * // Access theme variables\n * const primaryColor = this.theme?.sys?.color?.primary?.default\n * // ...\n * }\n * }\n * ```\n */\nexport const themeContext = createContext<Partial<TSchmancyTheme>>('theme-context')\n","import { provide } from '@lit/context'\nimport { argbFromHex, themeFromSourceColor } from '@material/material-color-utilities'\nimport { $LitElement } from '@mixins/index'\nimport { html, unsafeCSS } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { Observable, of, switchMap, fromEvent, takeUntil } from 'rxjs'\nimport { themeContext } from './context'\nimport { formateTheme } from './theme.format'\nimport { TSchmancyTheme } from './theme.interface'\nimport { ThemeHereIAm, ThemeWhereAreYou, ThemeWhereAreYouEvent } from './theme.events'\nimport style from './theme.style.css?inline'\nexport const tailwindStyles = unsafeCSS(style)\nconst mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\nconst $colorScheme = new Observable<string>(subscriber => {\n\t// Emit the initial value\n\tconst initialColorScheme = mediaQuery.matches ? 'dark' : 'light'\n\tsubscriber.next(initialColorScheme)\n\n\t// Subscribe to media query changes using RxJS\n\tconst subscription = fromEvent<MediaQueryListEvent>(mediaQuery, 'change')\n\t\t.subscribe(e => {\n\t\t\tconst newColorScheme = e.matches ? 'dark' : 'light'\n\t\t\tsubscriber.next(newColorScheme)\n\t\t})\n\n\t// On unsubscribe, unsubscribe from the RxJS subscription\n\treturn () => subscription.unsubscribe()\n})\n\n/**\n * SchmancyThemeComponent - Provides theming capabilities for Schmancy components.\n *\n * This component manages color schemes, primary colors, and theme distribution\n * throughout the component tree. It can be used at the root level or nested\n * to provide different themes to different parts of the application.\n *\n * @element schmancy-theme\n *\n * @example\n * ```html\n * <!-- Root theme provider -->\n * <schmancy-theme color=\"#6200ee\" scheme=\"auto\" root>\n * <your-app></your-app>\n * </schmancy-theme>\n *\n * <!-- Nested theme for specific section -->\n * <schmancy-theme color=\"#2196f3\" scheme=\"dark\">\n * <div class=\"dark-section\">\n * <!-- Components here will use blue dark theme -->\n * </div>\n * </schmancy-theme>\n * ```\n */\n@customElement('schmancy-theme')\nexport class SchmancyThemeComponent extends $LitElement(tailwindStyles) {\n\t/**\n\t * Primary color for the theme in hex format.\n\t * @attr color\n\t * @type {string}\n\t * @default Random generated color\n\t * @example \"#6200ee\"\n\t */\n\t@property({ type: String, reflect: true })\n\tcolor: string\n\n\t/**\n\t * Color scheme for the theme.\n\t * @attr scheme\n\t * @type {'dark' | 'light' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ type: String }) scheme: 'dark' | 'light' | 'auto' = 'auto'\n\n\t/**\n\t * Whether this theme should be applied at the root level (document.body).\n\t * @attr root\n\t * @type {boolean}\n\t * @default false\n\t */\n\t@property({ type: Boolean }) root = false\n\n\t/**\n\t * Unique name for this theme instance (used for session storage).\n\t * If not provided, will be generated from DOM path.\n\t * @attr name\n\t * @type {string}\n\t */\n\t@property({ type: String }) name?: string\n\n\t/**\n\t * Theme configuration object containing all theme variables.\n\t * @property {Partial<TSchmancyTheme>} theme\n\t * @internal\n\t */\n\t@provide({\n\t\tcontext: themeContext,\n\t})\n\t@property({ type: Object })\n\ttheme: Partial<TSchmancyTheme> = {}\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Generate unique theme name for session storage\n\t\tconst themeName = this.generateThemeName()\n\n\t\t// Priority 1: Session storage\n\t\tconst storedColor = sessionStorage.getItem(`schmancy-theme-${themeName}-color`)\n\t\tconst storedScheme = sessionStorage.getItem(`schmancy-theme-${themeName}-scheme`)\n\n\t\t// Priority 2: Properties (if set via attributes)\n\t\t// Priority 3: Random generation\n\t\tif (!this.color) {\n\t\t\tthis.color = storedColor || this.generateRandomColor()\n\t\t\t// Save the initial color to session storage\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-color`, this.color)\n\t\t}\n\n\t\tif (!this.hasAttribute('scheme') && storedScheme) {\n\t\t\tthis.scheme = storedScheme as 'dark' | 'light' | 'auto'\n\t\t}\n\n\t\t// Watch only OWN scheme property (independent per instance)\n\t\tof(this.scheme).pipe(\n\t\t\tswitchMap(scheme => {\n\t\t\t\tif (scheme === 'auto') return $colorScheme\n\t\t\t\treturn of(scheme)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe(scheme => {\n\t\t\tthis.scheme = scheme as 'dark' | 'light'\n\t\t\tthis.registerTheme()\n\t\t\t// Save to session storage with unique theme name\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-scheme`, this.scheme)\n\t\t})\n\n\t\t// Listen for generic theme discovery events\n\t\tfromEvent<ThemeWhereAreYouEvent>(this, ThemeWhereAreYou).pipe(\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe((e) => {\n\t\t\te.stopPropagation()\n\t\t\te.preventDefault()\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent(ThemeHereIAm, {\n\t\t\t\t\tdetail: { theme: this },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t})\n\t}\n\n\tupdated(changedProperties: Map<string | number | symbol, unknown>): void {\n\t\tsuper.updated(changedProperties)\n\n\t\t// Generate unique theme name for session storage\n\t\tconst themeName = this.generateThemeName()\n\n\t\t// Re-register theme and save to session when properties change\n\t\tif (changedProperties.has('color')) {\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-color`, this.color)\n\t\t\tthis.registerTheme()\n\t\t}\n\n\t\tif (changedProperties.has('scheme')) {\n\t\t\tsessionStorage.setItem(`schmancy-theme-${themeName}-scheme`, this.scheme)\n\t\t\tthis.registerTheme()\n\t\t}\n\n\t\tif (changedProperties.has('theme')) {\n\t\t\tthis.registerTheme()\n\t\t}\n\t}\n\tregisterTheme() {\n\t\t// Ensure color is a valid hex string\n\t\tconst colorHex = typeof this.color === 'string' ? this.color : '#6200ee'\n\n\t\tlet theme = formateTheme(\n\t\t\tthemeFromSourceColor(argbFromHex(colorHex)),\n\t\t\tthis.scheme === 'dark' ? true : false,\n\t\t\t{\n\t\t\t\tsuccess: argbFromHex('#34B334'),\n\t\t\t\twarning: argbFromHex('#FFA726'),\n\t\t\t\tinfo: argbFromHex('#29B6F6')\n\t\t\t}\n\t\t)\n\t\ttheme = { ...theme, ...this.theme }\n\n\t\tthis.registerThemeValues('schmancy', '', theme)\n\n\t\t// Backward compatibility: Map old variable names to new ones\n\t\tconst hostElement = this.root ? document.body : (this.shadowRoot.host as HTMLElement)\n\t\tconst getVar = (name: string) => hostElement.style.getPropertyValue(name)\n\n\t\t// Map old surface container names to new M3 names\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-low', getVar('--schmancy-sys-color-surface-containerLow'))\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-high', getVar('--schmancy-sys-color-surface-containerHigh'))\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-highest', getVar('--schmancy-sys-color-surface-containerHighest'))\n\t\thostElement.style.setProperty('--schmancy-sys-color-surface-lowest', getVar('--schmancy-sys-color-surface-containerLowest'))\n\n\t\t// Set the color-scheme CSS property on the host element\n\t\thostElement.style.colorScheme = this.scheme === 'dark' ? 'dark' : 'light'\n\t}\n\n\tregisterThemeValues(prefix = 'schmancy', path: string, value: Partial<TSchmancyTheme>): string | undefined {\n\t\t// if the value is an object\n\t\tif (typeof value === 'object') {\n\t\t\t// generate the code for each property of the object\n\t\t\treturn Object.keys(value)\n\t\t\t\t.map(key => {\n\t\t\t\t\t// if the path is empty, don't add a dash\n\t\t\t\t\treturn this.registerThemeValues(\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tpath + `${path ? '-' : ''}` + key,\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tvalue[key],\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.join('\\n')\n\t\t} else {\n\t\t\t;(this.root ? document.body : (this.shadowRoot.host as HTMLElement)).style.setProperty(\n\t\t\t\t`--${prefix}-${path}`,\n\t\t\t\tvalue,\n\t\t\t)\n\n\t\t\treturn\n\t\t}\n\t}\n\tgenerateRandomColor() {\n\t\t// Generates a random hexadecimal color code\n\t\tconst randomColor = Math.floor(Math.random() * 16777215).toString(16)\n\t\t// Pad with leading zeros if necessary to ensure 6 characters\n\t\treturn '#' + randomColor.padStart(6, '0')\n\t}\n\n\t/**\n\t * Generate a unique theme name based on DOM path\n\t */\n\tprivate generateThemeName(): string {\n\t\t// If name is provided, use it\n\t\tif (this.name) return this.name\n\n\t\t// Generate from DOM path\n\t\tconst path: string[] = []\n\t\tlet element: Element | null = this as Element\n\n\t\twhile (element && element !== document.body) {\n\t\t\tconst parent = element.parentElement\n\t\t\tif (parent) {\n\t\t\t\tconst index = Array.from(parent.children).indexOf(element)\n\t\t\t\tconst tag = element.tagName.toLowerCase()\n\t\t\t\tpath.unshift(`${tag}[${index}]`)\n\t\t\t}\n\t\t\telement = parent\n\t\t}\n\n\t\treturn path.join('>')\n\t}\n\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme': SchmancyThemeComponent\n\t}\n}\n","import { $LitElement } from '@mixins/litElement.mixin'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { debounceTime, Subject, takeUntil, tap, switchMap, of } from 'rxjs'\nimport type { SchmancyThemeComponent } from './theme.component'\n\nexport interface ColorPreset {\n\tname: string\n\tvalue: string\n\tcategory?: 'primary' | 'secondary' | 'accent'\n}\n\n// Re-export for convenience\nexport type { ColorPreset as ThemeColorPreset }\n\n/**\n * Base theme controller component providing color and scheme controls.\n * Can be used standalone without any specific UI container.\n *\n * @element schmancy-theme-controller\n *\n * @property {ColorPreset[]} customColors - Optional custom color presets\n *\n * @example\n * ```html\n * <schmancy-theme-controller></schmancy-theme-controller>\n *\n * <!-- With custom colors -->\n * <schmancy-theme-controller\n * .customColors=\"${[\n * { name: 'Brand', value: '#FF5722', category: 'primary' }\n * ]}\"\n * ></schmancy-theme-controller>\n * ```\n */\n@customElement('schmancy-theme-controller')\nexport class SchmancyThemeController extends $LitElement() {\n\t@state() protected currentScheme: 'dark' | 'light' | 'auto' = 'auto'\n\t@state() protected currentColor: string = '#6200ee'\n\t@state() protected resolvedScheme: 'dark' | 'light' = 'light'\n\t@state() private themeComponent: SchmancyThemeComponent | null = null\n\n\t@property({ type: Array }) customColors?: ColorPreset[]\n\n\tprotected colorInput$ = new Subject<string>()\n\n\tprotected get presetColors(): ColorPreset[] {\n\t\tif (this.customColors) return this.customColors\n\n\t\treturn [\n\t\t\t{ name: 'Lavender', value: '#9D8FE8', category: 'primary' },\n\t\t\t{ name: 'Rose', value: '#F48B9D', category: 'accent' },\n\t\t\t{ name: 'Mint', value: '#7ED997', category: 'accent' },\n\t\t\t{ name: 'Amber', value: '#FFC875', category: 'accent' },\n\t\t\t{ name: 'Sky', value: '#6DD5FA', category: 'primary' },\n\t\t\t{ name: 'Coral', value: '#FF9E7C', category: 'secondary' },\n\t\t\t{ name: 'Indigo', value: '#7380E8', category: 'primary' },\n\t\t\t{ name: 'Blush', value: '#FF79A8', category: 'secondary' },\n\t\t\t{ name: 'Aqua', value: '#64E0F0', category: 'accent' },\n\t\t\t{ name: 'Gold', value: '#FFE066', category: 'accent' },\n\t\t\t{ name: 'Slate', value: '#6B7E91', category: 'primary' },\n\t\t\t{ name: 'Onyx', value: '#3D4451', category: 'primary' },\n\t\t\t{ name: 'Plum', value: '#8E6BA8', category: 'secondary' },\n\t\t\t{ name: 'Forest', value: '#5A7A5F', category: 'accent' },\n\t\t\t{ name: 'Navy', value: '#3D5A80', category: 'primary' },\n\t\t\t{ name: 'Burgundy', value: '#994F5E', category: 'accent' },\n\t\t]\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Discover the nearest theme component\n\t\tthis.discover<SchmancyThemeComponent>('schmancy-theme').pipe(\n\t\t\tswitchMap(theme => {\n\t\t\t\tif (theme) {\n\t\t\t\t\tthis.themeComponent = theme\n\t\t\t\t\t// Set initial values from discovered theme\n\t\t\t\t\tthis.currentScheme = theme.scheme\n\t\t\t\t\tthis.currentColor = theme.color\n\n\t\t\t\t\t// Watch for theme property changes\n\t\t\t\t\treturn new Subject().pipe(\n\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\tif (this.themeComponent) {\n\t\t\t\t\t\t\t\tthis.currentScheme = this.themeComponent.scheme\n\t\t\t\t\t\t\t\tthis.currentColor = this.themeComponent.color\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn of(null)\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\t// Debounced color input\n\t\tthis.colorInput$.pipe(\n\t\t\tdebounceTime(150),\n\t\t\ttap(color => {\n\t\t\t\tif (this.themeComponent) {\n\t\t\t\t\tthis.themeComponent.color = color\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprotected setScheme(scheme: 'dark' | 'light' | 'auto') {\n\t\tif (this.themeComponent) {\n\t\t\tthis.themeComponent.scheme = scheme\n\t\t\tthis.currentScheme = scheme\n\t\t}\n\t}\n\n\tprotected setColor(color: string) {\n\t\tif (this.themeComponent) {\n\t\t\tthis.themeComponent.color = color\n\t\t\tthis.currentColor = color\n\t\t}\n\t}\n\n\tprotected handleColorInput(e: Event) {\n\t\tconst input = e.target as HTMLInputElement\n\t\tthis.colorInput$.next(input.value)\n\t}\n\n\tprotected randomColor() {\n\t\tconst random = this.presetColors[Math.floor(Math.random() * this.presetColors.length)]\n\t\tthis.setColor(random.value)\n\t}\n\n\tprotected triggerColorPicker() {\n\t\tconst input = this.renderRoot.querySelector('input[type=\"color\"]') as HTMLInputElement\n\t\tinput?.click()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"space-y-4\">\n\t\t\t\t<!-- Color Display -->\n\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"w-16 h-16 rounded-xl border-2 border-outline cursor-pointer transition-transform hover:scale-105 active:scale-95\"\n\t\t\t\t\t\tstyle=\"background: ${this.currentColor}\"\n\t\t\t\t\t\t@click=\"${this.triggerColorPicker}\"\n\t\t\t\t\t\ttitle=\"Click to change color\"\n\t\t\t\t\t></div>\n\t\t\t\t\t<div class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<schmancy-typography type=\"body\" class=\"font-mono opacity-60\"> ${this.currentColor} </schmancy-typography>\n\t\t\t\t\t\t<div class=\"flex gap-1 mt-2\">\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"${this.currentScheme === 'light' ? 'tonal' : 'text'}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setScheme('light')}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon>light_mode</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"${this.currentScheme === 'dark' ? 'tonal' : 'text'}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setScheme('dark')}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon>dark_mode</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"${this.currentScheme === 'auto' ? 'tonal' : 'text'}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setScheme('auto')}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon>contrast</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t<schmancy-button variant=\"text\" @click=\"${this.randomColor}\">\n\t\t\t\t\t\t\t\t<schmancy-icon>shuffle</schmancy-icon>\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Palette -->\n\t\t\t\t<div class=\"flex flex-wrap gap-1.5\">\n\t\t\t\t\t${this.presetColors.map(\n\t\t\t\t\t\tcolor => html`\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"w-7 h-7 rounded-full transition-all hover:scale-110 active:scale-95 ${this.currentColor ===\n\t\t\t\t\t\t\t\tcolor.value\n\t\t\t\t\t\t\t\t\t? 'ring-2 ring-primary ring-offset-1'\n\t\t\t\t\t\t\t\t\t: ''}\"\n\t\t\t\t\t\t\t\tstyle=\"background: ${color.value}\"\n\t\t\t\t\t\t\t\t@click=\"${() => this.setColor(color.value)}\"\n\t\t\t\t\t\t\t\ttitle=\"${color.name}\"\n\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Hidden Color Input -->\n\t\t\t\t<input type=\"color\" .value=\"${this.currentColor}\" @input=\"${this.handleColorInput}\" class=\"hidden\" />\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-controller': SchmancyThemeController\n\t}\n}","/**\n * Theme Audio Player Component\n *\n * A generic audio player that generates emotional sounds based on user mood and theme color.\n * Integrates with the Sound Service for playback and theme management.\n * Uses local storage for persistence via the Sound Service.\n *\n * @element schmancy-theme-audio-player\n *\n * @fires schmancy-generate-mood-audio - Dispatched when user requests audio generation\n * detail: { moodText: string, themeColor: string, scheme: 'dark' | 'light' | 'auto' }\n *\n * @example\n * ```html\n * <schmancy-theme-audio-player\n * @schmancy-generate-mood-audio=${(e) => handleGenerate(e.detail)}\n * ></schmancy-theme-audio-player>\n * ```\n */\n\nimport { $LitElement } from '@mixins/litElement.mixin'\nimport { html, css } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { debounceTime, Subject, takeUntil, tap, switchMap, of } from 'rxjs'\nimport { sound } from '../audio/sound.service'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type {\n\tAudioSequence,\n\tGenerateMoodAudioRequest,\n\tGenerateMoodAudioResponse,\n\tSoundTheme,\n\tFeeling,\n} from '@schmancy/types/mood-audio.types'\n\n/** Event detail for mood audio generation request */\nexport interface GenerateMoodAudioEventDetail extends GenerateMoodAudioRequest {}\n\n/** Custom event for requesting mood audio generation */\nexport class SchmancyGenerateMoodAudioEvent extends CustomEvent<GenerateMoodAudioEventDetail> {\n\tconstructor(detail: GenerateMoodAudioEventDetail) {\n\t\tsuper('schmancy-generate-mood-audio', {\n\t\t\tdetail,\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t})\n\t}\n}\n\n// Add to global event map\ndeclare global {\n\tinterface HTMLElementEventMap {\n\t\t'schmancy-generate-mood-audio': SchmancyGenerateMoodAudioEvent\n\t}\n}\n\n/**\n * Mood Audio Player - Generates emotional sounds based on mood and theme\n * Integrates with the Sound Service for consistent sound management\n */\n@customElement('schmancy-theme-audio-player')\nexport class SchmancyThemeAudioPlayer extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`) {\n\t/** Current theme color */\n\t@state() private currentColor: string = '#6200ee'\n\n\t/** Current color scheme */\n\t@state() private currentScheme: 'dark' | 'light' | 'auto' = 'auto'\n\n\t/** User's mood input */\n\t@state() private moodText: string = ''\n\n\t/** Loading state for AI generation */\n\t@state() private isGenerating: boolean = false\n\n\t/** Generated audio sequence */\n\t@state() private audioSequence: AudioSequence | null = null\n\n\t/** Detected mood from AI */\n\t@state() private detectedMood: string = ''\n\n\t/** Error message */\n\t@state() private error: string = ''\n\n\t/** Current volume from sound service */\n\t@state() private volume: number = 0.15\n\n\t/** Current sound theme name */\n\t@state() private currentThemeName: string = 'default'\n\n\t/** Reference to theme component */\n\tprivate themeComponent: SchmancyThemeComponent | null = null\n\n\t/** Subject for mood input changes */\n\tprivate moodInput$ = new Subject<string>()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Sync with sound service\n\t\tsound.volume$.pipe(takeUntil(this.disconnecting)).subscribe(vol => {\n\t\t\tthis.volume = vol\n\t\t})\n\n\t\tsound.themeName$.pipe(takeUntil(this.disconnecting)).subscribe(name => {\n\t\t\tthis.currentThemeName = name\n\t\t})\n\n\t\t// Sync the current theme from local storage to update UI\n\t\tsound.theme$.pipe(takeUntil(this.disconnecting)).subscribe(theme => {\n\t\t\tif (theme) {\n\t\t\t\tthis.detectedMood = theme.name.replace('AI: ', '')\n\t\t\t}\n\t\t})\n\n\t\t// Discover the nearest theme component\n\t\tthis.discover<SchmancyThemeComponent>('schmancy-theme')\n\t\t\t.pipe(\n\t\t\t\tswitchMap(theme => {\n\t\t\t\t\tif (theme) {\n\t\t\t\t\t\tthis.themeComponent = theme\n\t\t\t\t\t\tthis.currentScheme = theme.scheme\n\t\t\t\t\t\tthis.currentColor = theme.color\n\n\t\t\t\t\t\t// Create observer for theme changes\n\t\t\t\t\t\treturn new Subject().pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tif (this.themeComponent) {\n\t\t\t\t\t\t\t\t\tthis.currentScheme = this.themeComponent.scheme\n\t\t\t\t\t\t\t\t\tthis.currentColor = this.themeComponent.color\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn of(null)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Debounced mood input for AI generation\n\t\tthis.moodInput$\n\t\t\t.pipe(\n\t\t\t\tdebounceTime(500),\n\t\t\t\ttap(text => {\n\t\t\t\t\tthis.moodText = text\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/** Handle mood input change */\n\tprivate handleMoodInput(e: Event): void {\n\t\tconst input = e.target as HTMLInputElement\n\t\tthis.moodInput$.next(input.value)\n\t}\n\n\t/** Request mood audio generation - dispatches event for host app to handle */\n\tprivate requestMoodAudio(): void {\n\t\tif (!this.moodText.trim()) {\n\t\t\tthis.error = 'Please enter how you are feeling'\n\t\t\treturn\n\t\t}\n\n\t\tthis.error = ''\n\t\tthis.isGenerating = true\n\t\tthis.audioSequence = null\n\t\tthis.detectedMood = ''\n\n\t\t// Dispatch event for host app to handle the API call\n\t\tthis.dispatchEvent(\n\t\t\tnew SchmancyGenerateMoodAudioEvent({\n\t\t\t\tmoodText: this.moodText.trim(),\n\t\t\t\tthemeColor: this.currentColor,\n\t\t\t\tscheme: this.currentScheme,\n\t\t\t})\n\t\t)\n\t}\n\n\t/**\n\t * Set the response from the API call.\n\t * Called by the host app after handling the schmancy-generate-mood-audio event.\n\t */\n\tpublic setResponse(response: GenerateMoodAudioResponse): void {\n\t\tthis.isGenerating = false\n\n\t\tif (response.success && response.audioSequence) {\n\t\t\tthis.audioSequence = response.audioSequence\n\t\t\tthis.detectedMood = response.detectedMood\n\n\t\t\t// Convert AudioSequence to a SoundTheme and apply it (persists to local storage)\n\t\t\tconst soundTheme = this.audioSequenceToSoundTheme(response.audioSequence, response.detectedMood)\n\t\t\tsound.setTheme(soundTheme)\n\n\t\t\t// Play the detected mood feeling\n\t\t\tthis.playDetectedMood(response.detectedMood)\n\t\t} else {\n\t\t\tthis.error = response.error || 'Failed to generate audio'\n\t\t}\n\t}\n\n\t/**\n\t * Convert an AI-generated AudioSequence to a SoundTheme\n\t */\n\tprivate audioSequenceToSoundTheme(sequence: AudioSequence, detectedMood: string): SoundTheme {\n\t\tconst feeling = this.mapMoodToFeeling(detectedMood)\n\n\t\treturn {\n\t\t\tname: `AI: ${detectedMood}`,\n\t\t\tdescription: sequence.emotionalDescription,\n\t\t\tmasterVolume: sequence.masterVolume,\n\t\t\tfeelings: {\n\t\t\t\t[feeling]: {\n\t\t\t\t\tpuffs: sequence.puffs,\n\t\t\t\t\ttones: sequence.tones,\n\t\t\t\t\tdescription: sequence.emotionalDescription,\n\t\t\t\t},\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tsourceColor: this.currentColor,\n\t\t\t\tsourceMood: this.moodText,\n\t\t\t\tscheme: this.currentScheme,\n\t\t\t\tgeneratedAt: new Date().toISOString(),\n\t\t\t\tgeneratedBy: 'AI',\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Map a detected mood string to a Feeling type\n\t */\n\tprivate mapMoodToFeeling(mood: string): Feeling {\n\t\tconst normalizedMood = mood.toLowerCase().trim()\n\n\t\tconst directMatches: Record<string, Feeling> = {\n\t\t\tjoyful: 'joyful',\n\t\t\thappy: 'joyful',\n\t\t\tjoy: 'joyful',\n\t\t\tcontent: 'content',\n\t\t\tsatisfied: 'content',\n\t\t\texcited: 'excited',\n\t\t\tthrilled: 'excited',\n\t\t\tproud: 'proud',\n\t\t\thopeful: 'hopeful',\n\t\t\trelieved: 'relieved',\n\t\t\tgrateful: 'grateful',\n\t\t\tthankful: 'grateful',\n\t\t\tpeaceful: 'peaceful',\n\t\t\tserene: 'peaceful',\n\t\t\tplayful: 'playful',\n\t\t\tamused: 'amused',\n\t\t\tcurious: 'curious',\n\t\t\tinterested: 'curious',\n\t\t\tinspired: 'inspired',\n\t\t\tconfident: 'confident',\n\t\t\tloved: 'loved',\n\t\t\tcomforted: 'comforted',\n\t\t\tenergized: 'energized',\n\t\t\tcelebrated: 'celebrated',\n\t\t\tsad: 'sad',\n\t\t\tunhappy: 'sad',\n\t\t\tlonely: 'lonely',\n\t\t\talone: 'lonely',\n\t\t\tdisappointed: 'disappointed',\n\t\t\tmelancholic: 'melancholic',\n\t\t\tanxious: 'anxious',\n\t\t\tworried: 'worried',\n\t\t\tnervous: 'nervous',\n\t\t\tstressed: 'stressed',\n\t\t\toverwhelmed: 'overwhelmed',\n\t\t\tannoyed: 'annoyed',\n\t\t\tfrustrated: 'frustrated',\n\t\t\tangry: 'angry',\n\t\t\ttired: 'tired',\n\t\t\texhausted: 'exhausted',\n\t\t\tbored: 'bored',\n\t\t\tcalm: 'calm',\n\t\t\trelaxed: 'relaxed',\n\t\t\tconnected: 'connected',\n\t\t\tnostalgic: 'nostalgic',\n\t\t\tsurprised: 'surprised',\n\t\t\tconfused: 'confused',\n\t\t}\n\n\t\tif (directMatches[normalizedMood]) {\n\t\t\treturn directMatches[normalizedMood]\n\t\t}\n\n\t\tfor (const [keyword, feeling] of Object.entries(directMatches)) {\n\t\t\tif (normalizedMood.includes(keyword)) {\n\t\t\t\treturn feeling\n\t\t\t}\n\t\t}\n\n\t\treturn 'calm'\n\t}\n\n\t/**\n\t * Play the detected mood using the sound service\n\t */\n\tprivate playDetectedMood(mood: string): void {\n\t\tconst feeling = this.mapMoodToFeeling(mood)\n\t\tsound.play(feeling)\n\t}\n\n\t/**\n\t * Set an error state. Called by host app if API call fails.\n\t */\n\tpublic setError(message: string): void {\n\t\tthis.isGenerating = false\n\t\tthis.error = message\n\t}\n\n\t/** Replay the current audio sequence using sound service */\n\tprivate replay(): void {\n\t\tif (this.detectedMood) {\n\t\t\tthis.playDetectedMood(this.detectedMood)\n\t\t}\n\t}\n\n\t/** Handle volume change */\n\tprivate handleVolumeChange(e: Event): void {\n\t\tconst value = parseInt((e.target as HTMLInputElement).value) / 100\n\t\tsound.setVolume(value)\n\t}\n\n\t/** Reset to default sounds */\n\tprivate resetToDefaults(): void {\n\t\tsound.resetTheme()\n\t\tthis.audioSequence = null\n\t\tthis.detectedMood = ''\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"space-y-4\">\n\t\t\t\t<!-- Current Theme Status -->\n\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t<schmancy-typography type=\"label\" token=\"sm\" class=\"opacity-60\">\n\t\t\t\t\t\tSound Theme: ${this.currentThemeName}\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.currentThemeName !== 'default',\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-button variant=\"text\" size=\"sm\" @click=${() => this.resetToDefaults()}>\n\t\t\t\t\t\t\t\t<schmancy-icon size=\"16px\">refresh</schmancy-icon>\n\t\t\t\t\t\t\t\tReset\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t`\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Mood Input -->\n\t\t\t\t<div class=\"space-y-2\">\n\t\t\t\t\t<schmancy-typography type=\"label\" token=\"lg\" class=\"text-surface-on\">\n\t\t\t\t\t\tHow are you feeling today?\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tplaceholder=\"I'm feeling...\"\n\t\t\t\t\t\t.value=${this.moodText}\n\t\t\t\t\t\t@input=${this.handleMoodInput}\n\t\t\t\t\t\t?disabled=${this.isGenerating}\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t></schmancy-input>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Current Color Preview -->\n\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t<div class=\"w-10 h-10 rounded-lg border border-outline\" style=\"background: ${this.currentColor}\"></div>\n\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"opacity-60\"> Current theme color </schmancy-typography>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Generate Button -->\n\t\t\t\t<schmancy-button\n\t\t\t\t\tvariant=\"filled\"\n\t\t\t\t\t@click=${() => this.requestMoodAudio()}\n\t\t\t\t\t?disabled=${this.isGenerating || !this.moodText.trim()}\n\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t>\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.isGenerating,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-progress-circular indeterminate size=\"20\"></schmancy-progress-circular>\n\t\t\t\t\t\t\t<span class=\"ml-2\">Generating...</span>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-icon>music_note</schmancy-icon>\n\t\t\t\t\t\t\t<span class=\"ml-2\">Generate Mood Sound</span>\n\t\t\t\t\t\t`\n\t\t\t\t\t)}\n\t\t\t\t</schmancy-button>\n\n\t\t\t\t<!-- Error Message -->\n\t\t\t\t${when(\n\t\t\t\t\tthis.error,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<schmancy-surface type=\"error\" class=\"p-3 rounded-lg\">\n\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"text-error\"> ${this.error} </schmancy-typography>\n\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t`\n\t\t\t\t)}\n\n\t\t\t\t<!-- Generated Audio Info -->\n\t\t\t\t${when(\n\t\t\t\t\tthis.audioSequence,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<schmancy-surface type=\"containerLow\" rounded=\"all\" class=\"p-4 space-y-3\">\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"label\" token=\"lg\"> ${this.detectedMood} </schmancy-typography>\n\t\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"sm\" class=\"opacity-70\">\n\t\t\t\t\t\t\t\t\t\t${this.audioSequence?.emotionalDescription}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<schmancy-button variant=\"tonal\" @click=${() => this.replay()}>\n\t\t\t\t\t\t\t\t\t<schmancy-icon>replay</schmancy-icon>\n\t\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Audio Visualization -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-1 h-8\">\n\t\t\t\t\t\t\t\t${this.audioSequence?.puffs.map(\n\t\t\t\t\t\t\t\t\t(_, i) => html`\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-2 bg-primary rounded-full animate-pulse\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"height: ${20 + i * 8}px; animation-delay: ${i * 0.1}s\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t${this.audioSequence?.tones.map(\n\t\t\t\t\t\t\t\t\tt => html`\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-1 bg-secondary rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"height: ${Math.min(32, t.frequency / 40)}px; opacity: ${0.5 + t.volume * 0.5}\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Volume Control -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t<schmancy-icon class=\"opacity-50\">volume_down</schmancy-icon>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\t\t\t\tmin=\"0\"\n\t\t\t\t\t\t\t\t\tmax=\"100\"\n\t\t\t\t\t\t\t\t\t.value=${String(this.volume * 100)}\n\t\t\t\t\t\t\t\t\t@input=${this.handleVolumeChange}\n\t\t\t\t\t\t\t\t\tclass=\"flex-1 h-1 bg-surface-containerHighest rounded-full appearance-none cursor-pointer\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<schmancy-icon class=\"opacity-50\">volume_up</schmancy-icon>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t`\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-audio-player': SchmancyThemeAudioPlayer\n\t}\n}\n","import { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport { SchmancyThemeController } from './theme-controller'\nimport './theme-audio-player'\n\n/**\n * BOAT UX theme controller - Wraps the base theme controller in a schmancy-boat component.\n * Provides a floating, draggable container for theme controls.\n *\n * @element schmancy-theme-controller-boat\n *\n * @extends SchmancyThemeController\n *\n * @example\n * ```html\n * <schmancy-theme-controller-boat></schmancy-theme-controller-boat>\n *\n * <!-- With custom colors -->\n * <schmancy-theme-controller-boat\n * .customColors=\"${[\n * { name: 'Brand', value: '#FF5722', category: 'primary' }\n * ]}\"\n * ></schmancy-theme-controller-boat>\n * ```\n */\n@customElement('schmancy-theme-controller-boat')\nexport class SchmancyThemeControllerBoat extends SchmancyThemeController {\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-boat id=\"schmancy-theme-component\">\n\t\t\t\t<schmancy-icon slot=\"header\">palette</schmancy-icon>\n\n\t\t\t\t<div class=\"p-4 space-y-6\">\n\t\t\t\t\t${super.render()}\n\n\t\t\t\t\t<!-- Audio Player Section -->\n\t\t\t\t\t<schmancy-divider></schmancy-divider>\n\t\t\t\t\t<schmancy-theme-audio-player></schmancy-theme-audio-player>\n\t\t\t\t</div>\n\t\t\t</schmancy-boat>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-theme-controller-boat': SchmancyThemeControllerBoat\n\t}\n}"],"names":["signum","num","lerp","start","stop","amount","clampDouble","min","max","input","sanitizeDegreesDouble","degrees","matrixMultiply","row","matrix","SRGB_TO_XYZ","XYZ_TO_SRGB","WHITE_POINT_D65","argbFromRgb","red","green","blue","argbFromLinrgb","linrgb","delinearized","redFromArgb","argb","greenFromArgb","blueFromArgb","lstarFromArgb","y","mathUtils.matrixMultiply","linearized","labF","yFromLstar","lstar","ft","e","kappa","ft3","lstarFromY","rgbComponent","normalized","Math","pow","round","t","ViewingConditions","whitePoint","utils.whitePointD65","adaptingLuminance","PI","utils.yFromLstar","backgroundLstar","surround","discountingIlluminant","xyz","rW","gW","bW","f","c","math.lerp","d","exp","nc","rgbD","k","k4","k4F","fl","cbrt","n","z","sqrt","nbb","ncb","rgbAFactors","rgbA","aw","fLRoot","this","DEFAULT","make","Cam16","hue","chroma","j","q","m","s","jstar","astar","bstar","other","dJ","dA","dB","dEPrime","fromIntInViewingConditions","viewingConditions","redL","utils.linearized","greenL","blueL","x","rC","gC","bC","rD","gD","bD","rAF","abs","gAF","bAF","rA","math.signum","gA","bA","a","b","u","p2","atanDegrees","atan2","hueRadians","ac","huePrime","cos","alpha","mstar","log","sin","h","fromJchInViewingConditions","fromUcsInViewingConditions","toInt","viewed","hRad","eHue","p1","hSin","hCos","gamma","rCBase","gCBase","bCBase","rF","gF","bF","linearR","linearG","linearB","J","Q","C","M","HctSolver","angle","component","af","mathUtils.signum","scaledDiscount","SCALED_DISCOUNT_FROM_LINRGB","chromaticAdaptation","sanitizeRadians","source","mid","target","coordinate","axis","intercept","lerpPoint","kR","Y_FROM_LINRGB","kG","kB","coordA","coordB","g","r","isBounded","targetHue","left","right","leftHue","rightHue","initialized","uncut","nthVertex","midHue","hueOf","areInCyclicOrder","floor","ceil","segment","bisectToSegment","lPlane","rPlane","criticalPlaneBelow","trueDelinearized","criticalPlaneAbove","i","mPlane","midPlaneCoordinate","CRITICAL_PLANES","setCoordinate","midpoint","adapted","adaptedAbs","base","tInnerCoeff","iterationRound","jNormalized","inverseChromaticAdaptation","LINRGB_FROM_SCALED_DISCOUNT","fnj","colorUtils.argbFromLinrgb","hueDegrees","mathUtils.sanitizeDegreesDouble","colorUtils.yFromLstar","exactAnswer","findResultByJ","bisectToLimit","fromInt","solveToInt","Hct","tone","internalHue","newHue","setInternalState","internalChroma","internalTone","newChroma","newTone","cam","utils.lstarFromArgb","vc","viewedInVc","xyzInViewingConditions","recastInVc","fromXyzInViewingConditions","from","utils.lstarFromY","Blend","designColor","sourceColor","fromHct","toHct","differenceDegrees","rotationDegrees","outputHue","to","ucs","cam16Ucs","ucsCam","fromCam","colorUtils.lstarFromArgb","toCam","fromJ","fromA","fromB","fromUcs","Contrast","toneA","toneB","math.clampDouble","ratioOfYs","y1","y2","lighter","ratio","darkY","lightY","realContrast","delta","returnValue","lighterSafe","darkerSafe","darker","DislikeAnalyzer","hct","huePasses","chromaPasses","tonePasses","isDisliked","DynamicColor","args","name","palette","isBackground","background","secondBackground","contrastCurve","toneDeltaPair","hctCache","Map","Error","scheme","getHct","cachedAnswer","get","getTone","answer","size","clear","set","decreasingContrast","contrastLevel","roleA","roleB","polarity","stayTogether","bgTone","aIsNearer","isDark","nearer","farther","amNearer","expansionDir","nContrast","fContrast","nInitialTone","nTone","ratioOfTones","foregroundTone","fInitialTone","fTone","desiredRatio","bg1","bg2","bgTone1","bgTone2","upper","lower","lightOption","darkOption","availables","push","tonePrefersLightForeground","length","lighterTone","lighterUnsafe","darkerTone","darkerUnsafe","lighterRatio","darkerRatio","negligibleDifference","toneAllowsLightForeground","TonalPalette","keyColor","KeyColor","create","cache","requestedChroma","chromaCache","maxChromaValue","lowerTone","upperTone","midTone","isAscending","maxChroma","has","ContrastCurve","low","normal","medium","high","ToneDeltaPair","Variant","isFidelity","variant","FIDELITY","CONTENT","isMonochrome","MONOCHROME","MaterialDynamicColors","surfaceBright","surfaceDim","contentAccentToneDelta","primaryPaletteKeyColor","fromPalette","primaryPalette","secondaryPaletteKeyColor","secondaryPalette","tertiaryPaletteKeyColor","tertiaryPalette","neutralPaletteKeyColor","neutralPalette","neutralVariantPaletteKeyColor","neutralVariantPalette","onBackground","surface","surfaceContainerLowest","surfaceContainerLow","surfaceContainer","surfaceContainerHigh","surfaceContainerHighest","onSurface","highestSurface","surfaceVariant","onSurfaceVariant","inverseSurface","inverseOnSurface","outline","outlineVariant","shadow","scrim","surfaceTint","primary","primaryContainer","onPrimary","sourceColorHct","onPrimaryContainer","inversePrimary","secondary","secondaryContainer","onSecondary","initialTone","byDecreasingTone","closestToChroma","chromaPeak","potentialSolution","onSecondaryContainer","tertiary","tertiaryContainer","onTertiary","proposedHct","fixIfDisliked","onTertiaryContainer","error","errorPalette","errorContainer","onError","onErrorContainer","primaryFixed","primaryFixedDim","onPrimaryFixed","onPrimaryFixedVariant","secondaryFixed","secondaryFixedDim","onSecondaryFixed","onSecondaryFixedVariant","tertiaryFixed","tertiaryFixedDim","onTertiaryFixed","onTertiaryFixedVariant","CorePalette","colors","createPaletteFromColors","content","p","a2","a1","a3","neutral","n1","neutralVariant","n2","isContent","fromHueAndChroma","Scheme","props","lightFromCorePalette","of","darkFromCorePalette","contentOf","core","toJSON","argbFromHex","hex","isThree","replace","isSix","isEight","parseIntHex","slice","repeat","value","parseInt","themeFromSourceColor","customColors","schemes","light","dark","palettes","map","color","blend","harmonize","tones","onColor","colorContainer","onColorContainer","argbToHex","colorUtils.redFromArgb","colorUtils.greenFromArgb","colorUtils.blueFromArgb","outParts","toString","part","entries","join","createTonalPalette","formateTheme","originalTheme","extendedColors","successPalette","success","warningPalette","warning","infoPalette","info","sys","default","dim","bright","container","containerLow","containerLowest","containerHigh","containerHighest","on","onVariant","tint","inverse","inverseOn","highest","lowest","onContainer","fixed","fixedDim","onFixed","onFixedVariant","typography","display","large","small","headline","title","body","label","shape","corner","none","extraSmall","extraLarge","full","elevation","motion","easing","emphasized","emphasizedDecelerate","emphasizedAccelerate","standard","standardDecelerate","standardAccelerate","legacy","linear","duration","short1","short2","short3","short4","medium1","medium2","medium3","medium4","long1","long2","long3","long4","extraLong1","extraLong2","extraLong3","extraLong4","state","opacity","hover","focus","pressed","dragged","disabled","disabledContainer","spacing","ref","createLightTonalPaletteFromBaseColor","tonalPalette","cLowest","cLow","cHigh","cHighest","sDim","sBright","createDarkTonalPaletteFromBaseColor","ThemeContext","createContext","ThemeService","constructor","_theme$","BehaviorSubject","_themeComponent$","_fullscreen$","scheme$","$","pipe","settings","distinctUntilChanged","shareReplay","color$","theme$","asObservable","JSON","stringify","themeComponent$","fullscreen$","resolvedScheme$","switchMap","mediaQuery","window","matchMedia","Observable","subscriber","handler","next","matches","addEventListener","removeEventListener","discoverTheme","theme","getValue","themeComponent","fullscreen","fromEvent","ThemeHereIAm","takeUntil","timer","detail","defaultIfEmpty","tap","registerThemeComponent","dispatchEvent","CustomEvent","ThemeWhereAreYou","bubbles","composed","values","updates","Object","keys","isDarkMode","toggleScheme","currentScheme","newScheme","setScheme","variableName","host","root","document","shadowRoot","getComputedStyle","getPropertyValue","trim","getCSSVariable","setFullscreen","setColor","getInstance","instance","schmancyTheme","themeContext","tailwindStyles","unsafeCSS","$colorScheme","initialColorScheme","subscription","subscribe","newColorScheme","unsubscribe","SchmancyThemeComponent","$LitElement","super","arguments","connectedCallback","themeName","generateThemeName","storedColor","sessionStorage","getItem","storedScheme","generateRandomColor","setItem","hasAttribute","disconnecting","registerTheme","stopPropagation","preventDefault","changedProperties","updated","registerThemeValues","hostElement","getVar","style","setProperty","colorScheme","prefix","path","key","random","padStart","element","parent","parentElement","index","Array","children","indexOf","tag","tagName","toLowerCase","unshift","html","__decorateClass","property","type","String","reflect","prototype","Boolean","provide","context","customElement","SchmancyThemeController","currentColor","resolvedScheme","colorInput$","Subject","presetColors","category","discover","debounceTime","triggerColorPicker","renderRoot","querySelector","click","render","randomColor","handleColorInput","SchmancyGenerateMoodAudioEvent","SchmancyThemeAudioPlayer","css","moodText","isGenerating","audioSequence","detectedMood","volume","currentThemeName","moodInput$","sound","volume$","vol","themeName$","text","requestMoodAudio","themeColor","response","soundTheme","audioSequenceToSoundTheme","setTheme","playDetectedMood","sequence","feeling","mapMoodToFeeling","description","emotionalDescription","masterVolume","feelings","puffs","metadata","sourceMood","generatedAt","Date","toISOString","generatedBy","mood","normalizedMood","directMatches","joyful","happy","joy","satisfied","excited","thrilled","proud","hopeful","relieved","grateful","thankful","peaceful","serene","playful","amused","curious","interested","inspired","confident","loved","comforted","energized","celebrated","sad","unhappy","lonely","alone","disappointed","melancholic","anxious","worried","nervous","stressed","overwhelmed","annoyed","frustrated","angry","tired","exhausted","bored","calm","relaxed","connected","nostalgic","surprised","confused","keyword","includes","play","message","replay","setVolume","resetTheme","when","resetToDefaults","handleMoodInput","_","frequency","handleVolumeChange","SchmancyThemeControllerBoat"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}