@aotearoan/neon 18.0.0 → 18.0.2

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 (105) hide show
  1. package/dist/common/utils/NeonAlertService.cjs.js.map +1 -1
  2. package/dist/common/utils/NeonAlertService.es.js +10 -10
  3. package/dist/common/utils/NeonAlertService.es.js.map +1 -1
  4. package/dist/common/utils/NeonClosableUtils.cjs.js.map +1 -1
  5. package/dist/common/utils/NeonClosableUtils.es.js +2 -2
  6. package/dist/common/utils/NeonClosableUtils.es.js.map +1 -1
  7. package/dist/common/utils/NeonColorUtils.cjs.js.map +1 -1
  8. package/dist/common/utils/NeonColorUtils.es.js +31 -31
  9. package/dist/common/utils/NeonColorUtils.es.js.map +1 -1
  10. package/dist/common/utils/NeonDateUtils.cjs.js.map +1 -1
  11. package/dist/common/utils/NeonDateUtils.es.js +21 -21
  12. package/dist/common/utils/NeonDateUtils.es.js.map +1 -1
  13. package/dist/common/utils/NeonDebounceUtils.cjs.js.map +1 -1
  14. package/dist/common/utils/NeonDebounceUtils.es.js +3 -3
  15. package/dist/common/utils/NeonDebounceUtils.es.js.map +1 -1
  16. package/dist/common/utils/NeonDropdownPlacementUtils.cjs.js.map +1 -1
  17. package/dist/common/utils/NeonDropdownPlacementUtils.es.js +5 -5
  18. package/dist/common/utils/NeonDropdownPlacementUtils.es.js.map +1 -1
  19. package/dist/common/utils/NeonEventBus.cjs.js.map +1 -1
  20. package/dist/common/utils/NeonEventBus.es.js +7 -6
  21. package/dist/common/utils/NeonEventBus.es.js.map +1 -1
  22. package/dist/common/utils/NeonIconRegistry.cjs.js.map +1 -1
  23. package/dist/common/utils/NeonIconRegistry.es.js +6 -6
  24. package/dist/common/utils/NeonIconRegistry.es.js.map +1 -1
  25. package/dist/common/utils/NeonModeUtils.cjs.js.map +1 -1
  26. package/dist/common/utils/NeonModeUtils.es.js +5 -5
  27. package/dist/common/utils/NeonModeUtils.es.js.map +1 -1
  28. package/dist/common/utils/NeonNumberUtils.cjs.js +1 -1
  29. package/dist/common/utils/NeonNumberUtils.cjs.js.map +1 -1
  30. package/dist/common/utils/NeonNumberUtils.es.js +9 -9
  31. package/dist/common/utils/NeonNumberUtils.es.js.map +1 -1
  32. package/dist/common/utils/NeonPlacementUtils.cjs.js.map +1 -1
  33. package/dist/common/utils/NeonPlacementUtils.es.js +7 -7
  34. package/dist/common/utils/NeonPlacementUtils.es.js.map +1 -1
  35. package/dist/common/utils/NeonScrollUtils.cjs.js.map +1 -1
  36. package/dist/common/utils/NeonScrollUtils.es.js +1 -1
  37. package/dist/common/utils/NeonScrollUtils.es.js.map +1 -1
  38. package/dist/common/utils/NeonToastService.cjs.js.map +1 -1
  39. package/dist/common/utils/NeonToastService.es.js +10 -10
  40. package/dist/common/utils/NeonToastService.es.js.map +1 -1
  41. package/dist/common/utils/NeonTooltipPlacementUtils.cjs.js.map +1 -1
  42. package/dist/common/utils/NeonTooltipPlacementUtils.es.js +5 -5
  43. package/dist/common/utils/NeonTooltipPlacementUtils.es.js.map +1 -1
  44. package/dist/components/user-input/button/NeonButton.cjs.js +1 -1
  45. package/dist/components/user-input/button/NeonButton.cjs.js.map +1 -1
  46. package/dist/components/user-input/button/NeonButton.es.js +46 -32
  47. package/dist/components/user-input/button/NeonButton.es.js.map +1 -1
  48. package/dist/components/user-input/button/NeonButton.vue.cjs.js +1 -1
  49. package/dist/components/user-input/button/NeonButton.vue.cjs.js.map +1 -1
  50. package/dist/components/user-input/button/NeonButton.vue.es.js +25 -20
  51. package/dist/components/user-input/button/NeonButton.vue.es.js.map +1 -1
  52. package/dist/src/common/utils/NeonAlertService.d.ts +10 -10
  53. package/dist/src/common/utils/NeonClosableUtils.d.ts +2 -2
  54. package/dist/src/common/utils/NeonColorUtils.d.ts +31 -31
  55. package/dist/src/common/utils/NeonDateUtils.d.ts +21 -21
  56. package/dist/src/common/utils/NeonDebounceUtils.d.ts +3 -3
  57. package/dist/src/common/utils/NeonDropdownPlacementUtils.d.ts +5 -5
  58. package/dist/src/common/utils/NeonEventBus.d.ts +7 -6
  59. package/dist/src/common/utils/NeonIconRegistry.d.ts +6 -6
  60. package/dist/src/common/utils/NeonModeUtils.d.ts +5 -5
  61. package/dist/src/common/utils/NeonNumberUtils.d.ts +11 -11
  62. package/dist/src/common/utils/NeonPlacementUtils.d.ts +7 -7
  63. package/dist/src/common/utils/NeonScrollUtils.d.ts +1 -1
  64. package/dist/src/common/utils/NeonToastService.d.ts +14 -14
  65. package/dist/src/common/utils/NeonTooltipPlacementUtils.d.ts +5 -5
  66. package/dist/src/components/feedback/alert/NeonAlert.d.ts +1 -1
  67. package/dist/src/components/feedback/dialog/NeonDialog.d.ts +1 -1
  68. package/dist/src/components/feedback/linear-progress/NeonLinearProgress.d.ts +5 -5
  69. package/dist/src/components/feedback/note/NeonNote.d.ts +1 -1
  70. package/dist/src/components/feedback/notification-counter/NeonNotificationCounter.d.ts +1 -1
  71. package/dist/src/components/feedback/splash-loader/NeonSplashLoader.d.ts +1 -1
  72. package/dist/src/components/feedback/tooltip/NeonTooltip.d.ts +2 -2
  73. package/dist/src/components/layout/card-list/NeonCardList.d.ts +1 -1
  74. package/dist/src/components/layout/card-list/card/NeonCardListCard.d.ts +1 -1
  75. package/dist/src/components/layout/inline/NeonInline.d.ts +1 -1
  76. package/dist/src/components/navigation/dropdown-menu/NeonDropdownMenu.d.ts +1 -1
  77. package/dist/src/components/navigation/menu/NeonMenu.d.ts +1 -1
  78. package/dist/src/components/presentation/badge/NeonBadge.d.ts +4 -4
  79. package/dist/src/components/presentation/dropdown/NeonDropdown.d.ts +5 -5
  80. package/dist/src/components/presentation/expansion-indicator/NeonExpansionIndicator.d.ts +2 -2
  81. package/dist/src/components/presentation/expansion-panel/NeonExpansionPanel.d.ts +3 -3
  82. package/dist/src/components/presentation/icon/NeonIcon.d.ts +1 -1
  83. package/dist/src/components/presentation/label/NeonLabel.d.ts +2 -2
  84. package/dist/src/components/presentation/tabs/NeonTabs.d.ts +1 -1
  85. package/dist/src/components/user-input/button/NeonButton.d.ts +15 -9
  86. package/dist/src/components/user-input/chip/NeonChip.d.ts +2 -2
  87. package/dist/src/components/user-input/color/NeonColor.d.ts +1 -1
  88. package/dist/src/components/user-input/date-picker/NeonDatePicker.d.ts +3 -3
  89. package/dist/src/components/user-input/file/NeonFile.d.ts +4 -4
  90. package/dist/src/components/user-input/filter-list/NeonFilterList.d.ts +1 -1
  91. package/dist/src/components/user-input/input/NeonInput.d.ts +4 -4
  92. package/dist/src/components/user-input/list/NeonList.d.ts +2 -2
  93. package/dist/src/components/user-input/number/NeonNumber.d.ts +4 -4
  94. package/dist/src/components/user-input/range-slider/NeonRangeSlider.d.ts +3 -3
  95. package/dist/src/components/user-input/search/NeonSearch.d.ts +1 -1
  96. package/dist/src/components/user-input/select/NeonSelect.d.ts +1 -1
  97. package/dist/src/components/user-input/selectable-card/NeonSelectableCard.d.ts +1 -1
  98. package/dist/src/components/user-input/slider/NeonSlider.d.ts +3 -3
  99. package/dist/src/components/user-input/switch/NeonSwitch.d.ts +2 -2
  100. package/dist/src/components/user-input/toggle/NeonToggle.d.ts +1 -1
  101. package/dist/src/components/user-input/toggle-chip/NeonToggleChip.d.ts +1 -1
  102. package/package.json +8 -2
  103. package/src/sass/global/_base-html.scss +1 -0
  104. package/src/sass/includes/_scrollbars.scss +21 -0
  105. package/src/sass/variables.scss +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"NeonAlertService.cjs.js","sources":["../../../src/common/utils/NeonAlertService.ts"],"sourcesContent":["import { NeonEventBus } from './NeonEventBus';\nimport type { NeonAlertMessage } from '../models/NeonAlertMessage';\nimport { NeonAlertLevel } from '../enums/NeonAlertLevel';\n\n/**\n * NeonAlertService is a service for sending alerts to the <strong>NeonAlert</strong> component for display to the user.\n */\nexport class NeonAlertService {\n /**\n * Send an info message\n *\n * @param alert {NeonAlertMessage}\n */\n public static info(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Info, alert);\n }\n\n /**\n * Send a success message\n *\n * @param alert {NeonAlertMessage}\n */\n public static success(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Success, alert);\n }\n\n /**\n * Send a warning message\n *\n * @param alert {NeonAlertMessage}\n */\n public static warn(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Warn, alert);\n }\n\n /**\n * Send an error message\n *\n * @param alert {NeonAlertMessage}\n */\n public static error(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Error, alert);\n }\n\n /**\n * Generate an event key so that all events are published on the correct topic.\n *\n * @param eventType {NeonAlertLevel} Alert level of the event\n *\n * @returns {string} The event key for sending a message on <a href=\"/utils/NeonEventBus\">NeonEventBus</a>.\n */\n public static generateEventKey(eventType: NeonAlertLevel) {\n return `${NeonEventBus.messagePrefix}-alert-${eventType}`;\n }\n\n private static emit(eventType: NeonAlertLevel, alert: NeonAlertMessage) {\n const eventKey = NeonAlertService.generateEventKey(eventType);\n NeonEventBus.emit(eventKey, alert);\n }\n}\n"],"names":["NeonAlertService","alert","NeonAlertLevel","eventType","NeonEventBus","eventKey"],"mappings":"qKAOO,MAAMA,CAAiB,CAM5B,OAAc,KAAKC,EAAyB,CACzBD,EAAA,KAAKE,EAAAA,eAAe,KAAMD,CAAK,CAClD,CAOA,OAAc,QAAQA,EAAyB,CAC5BD,EAAA,KAAKE,EAAAA,eAAe,QAASD,CAAK,CACrD,CAOA,OAAc,KAAKA,EAAyB,CACzBD,EAAA,KAAKE,EAAAA,eAAe,KAAMD,CAAK,CAClD,CAOA,OAAc,MAAMA,EAAyB,CAC1BD,EAAA,KAAKE,EAAAA,eAAe,MAAOD,CAAK,CACnD,CASA,OAAc,iBAAiBE,EAA2B,CACxD,MAAO,GAAGC,EAAAA,aAAa,aAAa,UAAUD,CAAS,EACzD,CAEA,OAAe,KAAKA,EAA2BF,EAAyB,CAChE,MAAAI,EAAWL,EAAiB,iBAAiBG,CAAS,EAC/CC,EAAAA,aAAA,KAAKC,EAAUJ,CAAK,CACnC,CACF"}
1
+ {"version":3,"file":"NeonAlertService.cjs.js","sources":["../../../src/common/utils/NeonAlertService.ts"],"sourcesContent":["import { NeonEventBus } from './NeonEventBus';\nimport type { NeonAlertMessage } from '../models/NeonAlertMessage';\nimport { NeonAlertLevel } from '../enums/NeonAlertLevel';\n\n/**\n * NeonAlertService is a service for sending alerts to the <strong>NeonAlert</strong> component for display to the user.\n */\nexport class NeonAlertService {\n /**\n * Send an info message.\n *\n * @param alert The info message to display.\n */\n public static info(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Info, alert);\n }\n\n /**\n * Send a success message.\n *\n * @param alert The success message to display.\n */\n public static success(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Success, alert);\n }\n\n /**\n * Send a warning message.\n *\n * @param alert The warning message to display.\n */\n public static warn(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Warn, alert);\n }\n\n /**\n * Send an error message.\n *\n * @param alert The error message to display.\n */\n public static error(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Error, alert);\n }\n\n /**\n * Generate an event key so that all events are published on the correct topic.\n *\n * @param eventType Alert level of the event.\n *\n * @returns The event key for sending a message on <a href=\"/utils/NeonEventBus\">NeonEventBus</a>.\n */\n public static generateEventKey(eventType: NeonAlertLevel) {\n return `${NeonEventBus.messagePrefix}-alert-${eventType}`;\n }\n\n private static emit(eventType: NeonAlertLevel, alert: NeonAlertMessage) {\n const eventKey = NeonAlertService.generateEventKey(eventType);\n NeonEventBus.emit(eventKey, alert);\n }\n}\n"],"names":["NeonAlertService","alert","NeonAlertLevel","eventType","NeonEventBus","eventKey"],"mappings":"qKAOO,MAAMA,CAAiB,CAM5B,OAAc,KAAKC,EAAyB,CACzBD,EAAA,KAAKE,EAAAA,eAAe,KAAMD,CAAK,CAClD,CAOA,OAAc,QAAQA,EAAyB,CAC5BD,EAAA,KAAKE,EAAAA,eAAe,QAASD,CAAK,CACrD,CAOA,OAAc,KAAKA,EAAyB,CACzBD,EAAA,KAAKE,EAAAA,eAAe,KAAMD,CAAK,CAClD,CAOA,OAAc,MAAMA,EAAyB,CAC1BD,EAAA,KAAKE,EAAAA,eAAe,MAAOD,CAAK,CACnD,CASA,OAAc,iBAAiBE,EAA2B,CACxD,MAAO,GAAGC,EAAAA,aAAa,aAAa,UAAUD,CAAS,EACzD,CAEA,OAAe,KAAKA,EAA2BF,EAAyB,CAChE,MAAAI,EAAWL,EAAiB,iBAAiBG,CAAS,EAC/CC,EAAAA,aAAA,KAAKC,EAAUJ,CAAK,CACnC,CACF"}
@@ -2,33 +2,33 @@ import { NeonEventBus as a } from "./NeonEventBus.es.js";
2
2
  import { NeonAlertLevel as s } from "../enums/NeonAlertLevel.es.js";
3
3
  class e {
4
4
  /**
5
- * Send an info message
5
+ * Send an info message.
6
6
  *
7
- * @param alert {NeonAlertMessage}
7
+ * @param alert The info message to display.
8
8
  */
9
9
  static info(t) {
10
10
  e.emit(s.Info, t);
11
11
  }
12
12
  /**
13
- * Send a success message
13
+ * Send a success message.
14
14
  *
15
- * @param alert {NeonAlertMessage}
15
+ * @param alert The success message to display.
16
16
  */
17
17
  static success(t) {
18
18
  e.emit(s.Success, t);
19
19
  }
20
20
  /**
21
- * Send a warning message
21
+ * Send a warning message.
22
22
  *
23
- * @param alert {NeonAlertMessage}
23
+ * @param alert The warning message to display.
24
24
  */
25
25
  static warn(t) {
26
26
  e.emit(s.Warn, t);
27
27
  }
28
28
  /**
29
- * Send an error message
29
+ * Send an error message.
30
30
  *
31
- * @param alert {NeonAlertMessage}
31
+ * @param alert The error message to display.
32
32
  */
33
33
  static error(t) {
34
34
  e.emit(s.Error, t);
@@ -36,9 +36,9 @@ class e {
36
36
  /**
37
37
  * Generate an event key so that all events are published on the correct topic.
38
38
  *
39
- * @param eventType {NeonAlertLevel} Alert level of the event
39
+ * @param eventType Alert level of the event.
40
40
  *
41
- * @returns {string} The event key for sending a message on <a href="/utils/NeonEventBus">NeonEventBus</a>.
41
+ * @returns The event key for sending a message on <a href="/utils/NeonEventBus">NeonEventBus</a>.
42
42
  */
43
43
  static generateEventKey(t) {
44
44
  return `${a.messagePrefix}-alert-${t}`;
@@ -1 +1 @@
1
- {"version":3,"file":"NeonAlertService.es.js","sources":["../../../src/common/utils/NeonAlertService.ts"],"sourcesContent":["import { NeonEventBus } from './NeonEventBus';\nimport type { NeonAlertMessage } from '../models/NeonAlertMessage';\nimport { NeonAlertLevel } from '../enums/NeonAlertLevel';\n\n/**\n * NeonAlertService is a service for sending alerts to the <strong>NeonAlert</strong> component for display to the user.\n */\nexport class NeonAlertService {\n /**\n * Send an info message\n *\n * @param alert {NeonAlertMessage}\n */\n public static info(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Info, alert);\n }\n\n /**\n * Send a success message\n *\n * @param alert {NeonAlertMessage}\n */\n public static success(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Success, alert);\n }\n\n /**\n * Send a warning message\n *\n * @param alert {NeonAlertMessage}\n */\n public static warn(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Warn, alert);\n }\n\n /**\n * Send an error message\n *\n * @param alert {NeonAlertMessage}\n */\n public static error(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Error, alert);\n }\n\n /**\n * Generate an event key so that all events are published on the correct topic.\n *\n * @param eventType {NeonAlertLevel} Alert level of the event\n *\n * @returns {string} The event key for sending a message on <a href=\"/utils/NeonEventBus\">NeonEventBus</a>.\n */\n public static generateEventKey(eventType: NeonAlertLevel) {\n return `${NeonEventBus.messagePrefix}-alert-${eventType}`;\n }\n\n private static emit(eventType: NeonAlertLevel, alert: NeonAlertMessage) {\n const eventKey = NeonAlertService.generateEventKey(eventType);\n NeonEventBus.emit(eventKey, alert);\n }\n}\n"],"names":["NeonAlertService","alert","NeonAlertLevel","eventType","NeonEventBus","eventKey"],"mappings":";;AAOO,MAAMA,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5B,OAAc,KAAKC,GAAyB;AACzB,IAAAD,EAAA,KAAKE,EAAe,MAAMD,CAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,QAAQA,GAAyB;AAC5B,IAAAD,EAAA,KAAKE,EAAe,SAASD,CAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,KAAKA,GAAyB;AACzB,IAAAD,EAAA,KAAKE,EAAe,MAAMD,CAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,MAAMA,GAAyB;AAC1B,IAAAD,EAAA,KAAKE,EAAe,OAAOD,CAAK;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAc,iBAAiBE,GAA2B;AACxD,WAAO,GAAGC,EAAa,aAAa,UAAUD,CAAS;AAAA,EACzD;AAAA,EAEA,OAAe,KAAKA,GAA2BF,GAAyB;AAChE,UAAAI,IAAWL,EAAiB,iBAAiBG,CAAS;AAC/C,IAAAC,EAAA,KAAKC,GAAUJ,CAAK;AAAA,EACnC;AACF;"}
1
+ {"version":3,"file":"NeonAlertService.es.js","sources":["../../../src/common/utils/NeonAlertService.ts"],"sourcesContent":["import { NeonEventBus } from './NeonEventBus';\nimport type { NeonAlertMessage } from '../models/NeonAlertMessage';\nimport { NeonAlertLevel } from '../enums/NeonAlertLevel';\n\n/**\n * NeonAlertService is a service for sending alerts to the <strong>NeonAlert</strong> component for display to the user.\n */\nexport class NeonAlertService {\n /**\n * Send an info message.\n *\n * @param alert The info message to display.\n */\n public static info(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Info, alert);\n }\n\n /**\n * Send a success message.\n *\n * @param alert The success message to display.\n */\n public static success(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Success, alert);\n }\n\n /**\n * Send a warning message.\n *\n * @param alert The warning message to display.\n */\n public static warn(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Warn, alert);\n }\n\n /**\n * Send an error message.\n *\n * @param alert The error message to display.\n */\n public static error(alert: NeonAlertMessage) {\n NeonAlertService.emit(NeonAlertLevel.Error, alert);\n }\n\n /**\n * Generate an event key so that all events are published on the correct topic.\n *\n * @param eventType Alert level of the event.\n *\n * @returns The event key for sending a message on <a href=\"/utils/NeonEventBus\">NeonEventBus</a>.\n */\n public static generateEventKey(eventType: NeonAlertLevel) {\n return `${NeonEventBus.messagePrefix}-alert-${eventType}`;\n }\n\n private static emit(eventType: NeonAlertLevel, alert: NeonAlertMessage) {\n const eventKey = NeonAlertService.generateEventKey(eventType);\n NeonEventBus.emit(eventKey, alert);\n }\n}\n"],"names":["NeonAlertService","alert","NeonAlertLevel","eventType","NeonEventBus","eventKey"],"mappings":";;AAOO,MAAMA,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5B,OAAc,KAAKC,GAAyB;AACzB,IAAAD,EAAA,KAAKE,EAAe,MAAMD,CAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,QAAQA,GAAyB;AAC5B,IAAAD,EAAA,KAAKE,EAAe,SAASD,CAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,KAAKA,GAAyB;AACzB,IAAAD,EAAA,KAAKE,EAAe,MAAMD,CAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,MAAMA,GAAyB;AAC1B,IAAAD,EAAA,KAAKE,EAAe,OAAOD,CAAK;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAc,iBAAiBE,GAA2B;AACxD,WAAO,GAAGC,EAAa,aAAa,UAAUD,CAAS;AAAA,EACzD;AAAA,EAEA,OAAe,KAAKA,GAA2BF,GAAyB;AAChE,UAAAI,IAAWL,EAAiB,iBAAiBG,CAAS;AAC/C,IAAAC,EAAA,KAAKC,GAAUJ,CAAK;AAAA,EACnC;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NeonClosableUtils.cjs.js","sources":["../../../src/common/utils/NeonClosableUtils.ts"],"sourcesContent":["/**\n * Utility class for assisting with closing events for popup containers like modals, dropdowns, selects & drawers.\n * Detects click & touch events outside the popup element as well as escape key triggers.\n */\nexport class NeonClosableUtils {\n private readonly target: HTMLElement;\n private readonly closeCallback: () => void;\n private _open = false;\n\n /**\n * Initialise utility to listen to keyboard, mouse & touch events.\n *\n * @param target {HTMLElement} The popup <em>closable</em> element.\n * @param closeCallback {() => void} Callback function triggered when an event fires that should close the target\n * element.\n */\n public constructor(target: HTMLElement, closeCallback: () => void) {\n this.target = target;\n this.closeCallback = closeCallback;\n document.addEventListener('keydown', this.escapeKeyListener.bind(this), { passive: true });\n document.addEventListener('mousedown', this.handleOutsideClick.bind(this), { passive: true });\n document.addEventListener('touchstart', this.handleOutsideClick.bind(this), { passive: true });\n }\n\n /**\n * Inform the class that the target is now open. This adds the global <em>neon-closable--open</em> class to the\n * document body to prevent page scrolling while a popup is open.\n */\n public open() {\n this._open = true;\n document.body.classList.add('neon-closable--open');\n }\n\n /**\n * Destroy the listeners. Call this in the parent component's onUnmounted method.\n */\n public destroy() {\n document.removeEventListener('keydown', this.escapeKeyListener.bind(this));\n document.removeEventListener('mousedown', this.handleOutsideClick.bind(this));\n document.removeEventListener('touchstart', this.handleOutsideClick.bind(this));\n }\n\n escapeKeyListener(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n /**\n * Handle closing of the target element. This triggers the closeCallback & removes the global\n * <em>neon-closable--open</em> class from the document body.\n */\n public close() {\n this.closeCallback();\n\n if (this._open) {\n document.body.classList.remove('neon-closable--open');\n this._open = false;\n }\n }\n\n private handleOutsideClick(event: MouseEvent | TouchEvent) {\n const target = event.target && (event.target as Element);\n if (target && !this.target.contains(target)) {\n this.close();\n }\n return true;\n }\n}\n"],"names":["NeonClosableUtils","target","closeCallback","__publicField","event"],"mappings":"wPAIO,MAAMA,CAAkB,CAYtB,YAAYC,EAAqBC,EAA2B,CAXlDC,EAAA,eACAA,EAAA,sBACTA,EAAA,aAAQ,IAUd,KAAK,OAASF,EACd,KAAK,cAAgBC,EACZ,SAAA,iBAAiB,UAAW,KAAK,kBAAkB,KAAK,IAAI,EAAG,CAAE,QAAS,EAAM,CAAA,EAChF,SAAA,iBAAiB,YAAa,KAAK,mBAAmB,KAAK,IAAI,EAAG,CAAE,QAAS,EAAM,CAAA,EACnF,SAAA,iBAAiB,aAAc,KAAK,mBAAmB,KAAK,IAAI,EAAG,CAAE,QAAS,EAAM,CAAA,CAC/F,CAMO,MAAO,CACZ,KAAK,MAAQ,GACJ,SAAA,KAAK,UAAU,IAAI,qBAAqB,CACnD,CAKO,SAAU,CACf,SAAS,oBAAoB,UAAW,KAAK,kBAAkB,KAAK,IAAI,CAAC,EACzE,SAAS,oBAAoB,YAAa,KAAK,mBAAmB,KAAK,IAAI,CAAC,EAC5E,SAAS,oBAAoB,aAAc,KAAK,mBAAmB,KAAK,IAAI,CAAC,CAC/E,CAEA,kBAAkBE,EAAsB,CAClCA,EAAM,MAAQ,UAChB,KAAK,MAAM,CAEf,CAMO,OAAQ,CACb,KAAK,cAAc,EAEf,KAAK,QACE,SAAA,KAAK,UAAU,OAAO,qBAAqB,EACpD,KAAK,MAAQ,GAEjB,CAEQ,mBAAmBA,EAAgC,CACnD,MAAAH,EAASG,EAAM,QAAWA,EAAM,OACtC,OAAIH,GAAU,CAAC,KAAK,OAAO,SAASA,CAAM,GACxC,KAAK,MAAM,EAEN,EACT,CACF"}
1
+ {"version":3,"file":"NeonClosableUtils.cjs.js","sources":["../../../src/common/utils/NeonClosableUtils.ts"],"sourcesContent":["/**\n * Utility class for assisting with closing events for popup containers like modals, dropdowns, selects & drawers.\n * Detects click & touch events outside the popup element as well as escape key triggers.\n */\nexport class NeonClosableUtils {\n private readonly target: HTMLElement;\n private readonly closeCallback: () => void;\n private _open = false;\n\n /**\n * Initialise utility to listen to keyboard, mouse & touch events.\n *\n * @param target The popup <em>closable</em> element.\n * @param closeCallback Callback function triggered when an event fires that should close the target\n * element.\n */\n public constructor(target: HTMLElement, closeCallback: () => void) {\n this.target = target;\n this.closeCallback = closeCallback;\n document.addEventListener('keydown', this.escapeKeyListener.bind(this), { passive: true });\n document.addEventListener('mousedown', this.handleOutsideClick.bind(this), { passive: true });\n document.addEventListener('touchstart', this.handleOutsideClick.bind(this), { passive: true });\n }\n\n /**\n * Inform the class that the target is now open. This adds the global <em>neon-closable--open</em> class to the\n * document body to prevent page scrolling while a popup is open.\n */\n public open() {\n this._open = true;\n document.body.classList.add('neon-closable--open');\n }\n\n /**\n * Destroy the listeners. Call this in the parent component's onUnmounted method.\n */\n public destroy() {\n document.removeEventListener('keydown', this.escapeKeyListener.bind(this));\n document.removeEventListener('mousedown', this.handleOutsideClick.bind(this));\n document.removeEventListener('touchstart', this.handleOutsideClick.bind(this));\n }\n\n escapeKeyListener(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n /**\n * Handle closing of the target element. This triggers the closeCallback & removes the global\n * <em>neon-closable--open</em> class from the document body.\n */\n public close() {\n this.closeCallback();\n\n if (this._open) {\n document.body.classList.remove('neon-closable--open');\n this._open = false;\n }\n }\n\n private handleOutsideClick(event: MouseEvent | TouchEvent) {\n const target = event.target && (event.target as Element);\n if (target && !this.target.contains(target)) {\n this.close();\n }\n return true;\n }\n}\n"],"names":["NeonClosableUtils","target","closeCallback","__publicField","event"],"mappings":"wPAIO,MAAMA,CAAkB,CAYtB,YAAYC,EAAqBC,EAA2B,CAXlDC,EAAA,eACAA,EAAA,sBACTA,EAAA,aAAQ,IAUd,KAAK,OAASF,EACd,KAAK,cAAgBC,EACZ,SAAA,iBAAiB,UAAW,KAAK,kBAAkB,KAAK,IAAI,EAAG,CAAE,QAAS,EAAM,CAAA,EAChF,SAAA,iBAAiB,YAAa,KAAK,mBAAmB,KAAK,IAAI,EAAG,CAAE,QAAS,EAAM,CAAA,EACnF,SAAA,iBAAiB,aAAc,KAAK,mBAAmB,KAAK,IAAI,EAAG,CAAE,QAAS,EAAM,CAAA,CAC/F,CAMO,MAAO,CACZ,KAAK,MAAQ,GACJ,SAAA,KAAK,UAAU,IAAI,qBAAqB,CACnD,CAKO,SAAU,CACf,SAAS,oBAAoB,UAAW,KAAK,kBAAkB,KAAK,IAAI,CAAC,EACzE,SAAS,oBAAoB,YAAa,KAAK,mBAAmB,KAAK,IAAI,CAAC,EAC5E,SAAS,oBAAoB,aAAc,KAAK,mBAAmB,KAAK,IAAI,CAAC,CAC/E,CAEA,kBAAkBE,EAAsB,CAClCA,EAAM,MAAQ,UAChB,KAAK,MAAM,CAEf,CAMO,OAAQ,CACb,KAAK,cAAc,EAEf,KAAK,QACE,SAAA,KAAK,UAAU,OAAO,qBAAqB,EACpD,KAAK,MAAQ,GAEjB,CAEQ,mBAAmBA,EAAgC,CACnD,MAAAH,EAASG,EAAM,QAAWA,EAAM,OACtC,OAAIH,GAAU,CAAC,KAAK,OAAO,SAASA,CAAM,GACxC,KAAK,MAAM,EAEN,EACT,CACF"}
@@ -5,8 +5,8 @@ class d {
5
5
  /**
6
6
  * Initialise utility to listen to keyboard, mouse & touch events.
7
7
  *
8
- * @param target {HTMLElement} The popup <em>closable</em> element.
9
- * @param closeCallback {() => void} Callback function triggered when an event fires that should close the target
8
+ * @param target The popup <em>closable</em> element.
9
+ * @param closeCallback Callback function triggered when an event fires that should close the target
10
10
  * element.
11
11
  */
12
12
  constructor(e, t) {
@@ -1 +1 @@
1
- {"version":3,"file":"NeonClosableUtils.es.js","sources":["../../../src/common/utils/NeonClosableUtils.ts"],"sourcesContent":["/**\n * Utility class for assisting with closing events for popup containers like modals, dropdowns, selects & drawers.\n * Detects click & touch events outside the popup element as well as escape key triggers.\n */\nexport class NeonClosableUtils {\n private readonly target: HTMLElement;\n private readonly closeCallback: () => void;\n private _open = false;\n\n /**\n * Initialise utility to listen to keyboard, mouse & touch events.\n *\n * @param target {HTMLElement} The popup <em>closable</em> element.\n * @param closeCallback {() => void} Callback function triggered when an event fires that should close the target\n * element.\n */\n public constructor(target: HTMLElement, closeCallback: () => void) {\n this.target = target;\n this.closeCallback = closeCallback;\n document.addEventListener('keydown', this.escapeKeyListener.bind(this), { passive: true });\n document.addEventListener('mousedown', this.handleOutsideClick.bind(this), { passive: true });\n document.addEventListener('touchstart', this.handleOutsideClick.bind(this), { passive: true });\n }\n\n /**\n * Inform the class that the target is now open. This adds the global <em>neon-closable--open</em> class to the\n * document body to prevent page scrolling while a popup is open.\n */\n public open() {\n this._open = true;\n document.body.classList.add('neon-closable--open');\n }\n\n /**\n * Destroy the listeners. Call this in the parent component's onUnmounted method.\n */\n public destroy() {\n document.removeEventListener('keydown', this.escapeKeyListener.bind(this));\n document.removeEventListener('mousedown', this.handleOutsideClick.bind(this));\n document.removeEventListener('touchstart', this.handleOutsideClick.bind(this));\n }\n\n escapeKeyListener(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n /**\n * Handle closing of the target element. This triggers the closeCallback & removes the global\n * <em>neon-closable--open</em> class from the document body.\n */\n public close() {\n this.closeCallback();\n\n if (this._open) {\n document.body.classList.remove('neon-closable--open');\n this._open = false;\n }\n }\n\n private handleOutsideClick(event: MouseEvent | TouchEvent) {\n const target = event.target && (event.target as Element);\n if (target && !this.target.contains(target)) {\n this.close();\n }\n return true;\n }\n}\n"],"names":["NeonClosableUtils","target","closeCallback","__publicField","event"],"mappings":";;;AAIO,MAAMA,EAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYtB,YAAYC,GAAqBC,GAA2B;AAXlD,IAAAC,EAAA;AACA,IAAAA,EAAA;AACT,IAAAA,EAAA,eAAQ;AAUd,SAAK,SAASF,GACd,KAAK,gBAAgBC,GACZ,SAAA,iBAAiB,WAAW,KAAK,kBAAkB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAM,CAAA,GAChF,SAAA,iBAAiB,aAAa,KAAK,mBAAmB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAM,CAAA,GACnF,SAAA,iBAAiB,cAAc,KAAK,mBAAmB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAM,CAAA;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO;AACZ,SAAK,QAAQ,IACJ,SAAA,KAAK,UAAU,IAAI,qBAAqB;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKO,UAAU;AACf,aAAS,oBAAoB,WAAW,KAAK,kBAAkB,KAAK,IAAI,CAAC,GACzE,SAAS,oBAAoB,aAAa,KAAK,mBAAmB,KAAK,IAAI,CAAC,GAC5E,SAAS,oBAAoB,cAAc,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAAA,EAC/E;AAAA,EAEA,kBAAkBE,GAAsB;AAClC,IAAAA,EAAM,QAAQ,YAChB,KAAK,MAAM;AAAA,EAEf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ;AACb,SAAK,cAAc,GAEf,KAAK,UACE,SAAA,KAAK,UAAU,OAAO,qBAAqB,GACpD,KAAK,QAAQ;AAAA,EAEjB;AAAA,EAEQ,mBAAmBA,GAAgC;AACnD,UAAAH,IAASG,EAAM,UAAWA,EAAM;AACtC,WAAIH,KAAU,CAAC,KAAK,OAAO,SAASA,CAAM,KACxC,KAAK,MAAM,GAEN;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"NeonClosableUtils.es.js","sources":["../../../src/common/utils/NeonClosableUtils.ts"],"sourcesContent":["/**\n * Utility class for assisting with closing events for popup containers like modals, dropdowns, selects & drawers.\n * Detects click & touch events outside the popup element as well as escape key triggers.\n */\nexport class NeonClosableUtils {\n private readonly target: HTMLElement;\n private readonly closeCallback: () => void;\n private _open = false;\n\n /**\n * Initialise utility to listen to keyboard, mouse & touch events.\n *\n * @param target The popup <em>closable</em> element.\n * @param closeCallback Callback function triggered when an event fires that should close the target\n * element.\n */\n public constructor(target: HTMLElement, closeCallback: () => void) {\n this.target = target;\n this.closeCallback = closeCallback;\n document.addEventListener('keydown', this.escapeKeyListener.bind(this), { passive: true });\n document.addEventListener('mousedown', this.handleOutsideClick.bind(this), { passive: true });\n document.addEventListener('touchstart', this.handleOutsideClick.bind(this), { passive: true });\n }\n\n /**\n * Inform the class that the target is now open. This adds the global <em>neon-closable--open</em> class to the\n * document body to prevent page scrolling while a popup is open.\n */\n public open() {\n this._open = true;\n document.body.classList.add('neon-closable--open');\n }\n\n /**\n * Destroy the listeners. Call this in the parent component's onUnmounted method.\n */\n public destroy() {\n document.removeEventListener('keydown', this.escapeKeyListener.bind(this));\n document.removeEventListener('mousedown', this.handleOutsideClick.bind(this));\n document.removeEventListener('touchstart', this.handleOutsideClick.bind(this));\n }\n\n escapeKeyListener(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n /**\n * Handle closing of the target element. This triggers the closeCallback & removes the global\n * <em>neon-closable--open</em> class from the document body.\n */\n public close() {\n this.closeCallback();\n\n if (this._open) {\n document.body.classList.remove('neon-closable--open');\n this._open = false;\n }\n }\n\n private handleOutsideClick(event: MouseEvent | TouchEvent) {\n const target = event.target && (event.target as Element);\n if (target && !this.target.contains(target)) {\n this.close();\n }\n return true;\n }\n}\n"],"names":["NeonClosableUtils","target","closeCallback","__publicField","event"],"mappings":";;;AAIO,MAAMA,EAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYtB,YAAYC,GAAqBC,GAA2B;AAXlD,IAAAC,EAAA;AACA,IAAAA,EAAA;AACT,IAAAA,EAAA,eAAQ;AAUd,SAAK,SAASF,GACd,KAAK,gBAAgBC,GACZ,SAAA,iBAAiB,WAAW,KAAK,kBAAkB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAM,CAAA,GAChF,SAAA,iBAAiB,aAAa,KAAK,mBAAmB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAM,CAAA,GACnF,SAAA,iBAAiB,cAAc,KAAK,mBAAmB,KAAK,IAAI,GAAG,EAAE,SAAS,GAAM,CAAA;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO;AACZ,SAAK,QAAQ,IACJ,SAAA,KAAK,UAAU,IAAI,qBAAqB;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKO,UAAU;AACf,aAAS,oBAAoB,WAAW,KAAK,kBAAkB,KAAK,IAAI,CAAC,GACzE,SAAS,oBAAoB,aAAa,KAAK,mBAAmB,KAAK,IAAI,CAAC,GAC5E,SAAS,oBAAoB,cAAc,KAAK,mBAAmB,KAAK,IAAI,CAAC;AAAA,EAC/E;AAAA,EAEA,kBAAkBE,GAAsB;AAClC,IAAAA,EAAM,QAAQ,YAChB,KAAK,MAAM;AAAA,EAEf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ;AACb,SAAK,cAAc,GAEf,KAAK,UACE,SAAA,KAAK,UAAU,OAAO,qBAAqB,GACpD,KAAK,QAAQ;AAAA,EAEjB;AAAA,EAEQ,mBAAmBA,GAAgC;AACnD,UAAAH,IAASG,EAAM,UAAWA,EAAM;AACtC,WAAIH,KAAU,CAAC,KAAK,OAAO,SAASA,CAAM,KACxC,KAAK,MAAM,GAEN;AAAA,EACT;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NeonColorUtils.cjs.js","sources":["../../../src/common/utils/NeonColorUtils.ts"],"sourcesContent":["import type { NeonContrastAccessibility } from '@/common/models/NeonContrastAccessibility';\n\n/**\n * Utility class with helpers for calculating relative contrast & determining accessibility.\n * @ignore INTERNAL USE ONLY. This logic is specifically for the palette generator & is not intended for use elsewhere.\n */\nexport class NeonColorUtils {\n private static red = 0.2126;\n private static green = 0.7152;\n private static blue = 0.0722;\n private static labXn = 0.95047;\n private static labYn = 1;\n private static labZn = 1.08883;\n private static labT0 = 0.137931034; // 4 / 29\n private static labT1 = 0.206896552; // 6 / 29\n private static labT2 = 0.12841855; // 3 * t1 * t1\n private static labT3 = 0.008856452; // t1 * t1 * t1\n private static degreesToRadians = Math.PI / 180;\n private static radiansToDegrees = 180 / Math.PI;\n\n private static gamma = 2.4;\n\n /**\n * Calculate luminance from RGB color Array.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {number} The luminance.\n */\n public static luminance([r, g, b]: Array<number>) {\n const a = [r, g, b].map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, NeonColorUtils.gamma);\n });\n return a[0] * NeonColorUtils.red + a[1] * NeonColorUtils.green + a[2] * NeonColorUtils.blue;\n }\n\n /**\n * Hex color string to RGB Array.\n *\n * @param hexString {string} Hex color string to transform.\n *\n * @returns {Array<number>} RGB color array.\n */\n public static toRgb(hexString: string): Array<number> {\n return [\n Number.parseInt(hexString.substring(1, 3), 16),\n Number.parseInt(hexString.substring(3, 5), 16),\n Number.parseInt(hexString.substring(5, 7), 16),\n ];\n }\n\n /**\n * Convert RGB color array to xyz color space.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {Array<number>} xyz color value.\n */\n public static rgbToXyz(rgb: Array<number>): Array<number> {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.rgbValueToXyz(r);\n const g1 = NeonColorUtils.rgbValueToXyz(g);\n const b1 = NeonColorUtils.rgbValueToXyz(b);\n\n const x = NeonColorUtils.xyzToLab((0.4124564 * r1 + 0.3575761 * g1 + 0.1804375 * b1) / NeonColorUtils.labXn);\n const y = NeonColorUtils.xyzToLab((0.2126729 * r1 + 0.7151522 * g1 + 0.072175 * b1) / NeonColorUtils.labYn);\n const z = NeonColorUtils.xyzToLab((0.0193339 * r1 + 0.119192 * g1 + 0.9503041 * b1) / NeonColorUtils.labZn);\n\n return [x, y, z];\n }\n\n /**\n * Convert RGB color array to Lab color space.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {Array<number>} Lab color value.\n */\n public static rgbToLab(rgb: Array<number>): Array<number> {\n const [x, y, z] = NeonColorUtils.rgbToXyz(rgb);\n const l = 116 * y - 16;\n return [Math.max(l, 0), 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Convert RGB color array to Hcl color space.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {Array<number>} Hcl color value.\n */\n public static rgbToHcl(rgb: Array<number>): Array<number> {\n const lab = NeonColorUtils.rgbToLab(rgb);\n return NeonColorUtils.labToHcl(lab);\n }\n\n /**\n * Check two hex colors for their contrast accessibility.\n *\n * @param hex1 {string} Hex color 1.\n * @param hex2 {string} Hex color 2.\n *\n * @returns {NeonContrastAccessibility} Accessibility data.\n */\n public static isAccessible(rgb1: string, rgb2: string): NeonContrastAccessibility {\n const ratio = NeonColorUtils.contrast(NeonColorUtils.toRgb(rgb1), NeonColorUtils.toRgb(rgb2));\n\n const result = {\n largeAA: false,\n largeAAA: false,\n normalAA: false,\n normalAAA: false,\n ratio: Math.round(100 * ratio) / 100,\n };\n\n if (ratio >= 3) {\n result.largeAA = true;\n\n if (ratio >= 4.5) {\n result.normalAA = true;\n result.largeAAA = true;\n\n if (ratio >= 7) {\n result.normalAAA = true;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Calculate the contrast ratio between two colors.\n *\n * @param rgb1 {Array<number>} First color.\n * @param rgb2 {Array<number>} Second color.\n *\n * @returns {number} The contrast ratio (x:1).\n */\n public static contrast(rgb1: Array<number>, rgb2: Array<number>) {\n const lum1 = NeonColorUtils.luminance(rgb1);\n const lum2 = NeonColorUtils.luminance(rgb2);\n const brightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n return (brightest + 0.05) / (darkest + 0.05);\n }\n\n /**\n * Convert RGB color array to hex color string.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {string} hex color string.\n */\n public static rgbToHex(rgb: Array<number>): string {\n const [r, g, b] = rgb;\n const rHex = r.toString(16);\n const gHex = g.toString(16);\n const bHex = b.toString(16);\n return `#${rHex.length === 1 ? `0${rHex}` : rHex}${gHex.length === 1 ? `0${gHex}` : gHex}${\n bHex.length === 1 ? `0${bHex}` : bHex\n }`;\n }\n\n /**\n * Generate a Neon color palette with 5 light & 5 dark steps (l1-l5 & d1-d5) from a reference color. For both L1 & D1\n * steps this will search for the closest match to the reference color that meets at least AA contrast requirements.\n * The L2-L5 & D2-D5 steps are then generated based on a Hcl curve.\n *\n * @param referenceColor {string} Hex string of the reference color from which to generate the palette.\n * @param darkTextHex {string} The dark text color hex string for calculating the contrast ratio for L1-L5 steps.\n * @param lightTextHex {string} The light text color hex string for calculating the contrast ratio for D1-D5 steps.\n *\n * @returns {Record<string, string>} A map of the palette's color steps to hex values.\n */\n public static generatePalette(\n referenceColor: string,\n darkTextHex: string,\n lightTextHex: string,\n ): Record<string, string> {\n const referenceRgb = NeonColorUtils.toRgb(referenceColor);\n const [r, g, b] = referenceRgb;\n const darkTextRgb = NeonColorUtils.toRgb(darkTextHex);\n const lightTextRgb = NeonColorUtils.toRgb(lightTextHex);\n\n const [hue, _rest] = NeonColorUtils.rgbToHcl(referenceRgb);\n\n const [_l1Hue, l1Chroma, l1Luminance] = NeonColorUtils.lightReferenceColor(referenceRgb, darkTextRgb);\n const [_d1Hue, _d1Chroma, d1Luminance] = NeonColorUtils.darkReferenceColor(referenceRgb, lightTextRgb);\n\n const chromaCurve = NeonColorUtils.generateChromaCurve(l1Chroma);\n const luminanceCurve = NeonColorUtils.generateLuminanceCurve(l1Luminance, d1Luminance);\n\n // if blue is the dominant channel then adjust hue so it's not too purple\n // TODO: rework for some blue colors as they are still too purple\n if (b > 2 * g && b > 2 * r) {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 30, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 25, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 20, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 15, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[9], luminanceCurve[9])),\n };\n } else {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[9], luminanceCurve[9])),\n };\n }\n }\n\n private static generateChromaCurve(chroma: number) {\n const lStep = 0.25 * Math.abs(chroma - 10);\n const dStep = 0.25 * Math.abs(chroma - 10);\n\n return [\n chroma - 4 * lStep,\n chroma - 3 * lStep + 4,\n chroma - 2 * lStep + 6,\n chroma - lStep + 4,\n chroma,\n chroma,\n chroma - dStep + 4,\n chroma - 2 * dStep + 6,\n chroma - 3 * dStep + 4,\n chroma - 4 * dStep,\n ];\n }\n\n private static generateLuminanceCurve(lightLuminance: number, darkLuminance: number) {\n const lStep = 0.25 * (96 - lightLuminance);\n const dStep = 0.25 * (darkLuminance - 10);\n\n return [\n lightLuminance + 4 * lStep,\n lightLuminance + 3 * lStep,\n lightLuminance + 2 * lStep,\n lightLuminance + lStep,\n lightLuminance,\n darkLuminance,\n darkLuminance - dStep + 2,\n darkLuminance - 2 * dStep + 1,\n darkLuminance - 3 * dStep - 1,\n darkLuminance - 4 * dStep,\n ];\n }\n\n private static xyzToLab(t: number) {\n return t > NeonColorUtils.labT3 ? Math.pow(t, 1 / 3) : t / NeonColorUtils.labT2 + NeonColorUtils.labT0;\n }\n\n private static rgbValueToXyz(value: number) {\n const v1 = value / 255;\n return v1 <= 0.04045 ? v1 / 12.92 : Math.pow((v1 + 0.055) / 1.055, 2.4);\n }\n\n private static labToHcl(lab: Array<number>) {\n const [l, a, b] = lab;\n const c = Math.sqrt(a * a + b * b);\n const h = (Math.atan2(b, a) * NeonColorUtils.radiansToDegrees + 360) % 360;\n return [Math.round(h), c, l];\n }\n\n private static luminanceByChannel(channel: number) {\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }\n\n private static relativeLuminance(rgb: Array<number>) {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.luminanceByChannel(r / 255);\n const g1 = NeonColorUtils.luminanceByChannel(g / 255);\n const b1 = NeonColorUtils.luminanceByChannel(b / 255);\n return 0.2126 * r1 + 0.7152 * g1 + 0.0722 * b1;\n }\n\n private static contrastRatio(backgroundColor: Array<number>, textColor: Array<number>) {\n const lum1 = NeonColorUtils.relativeLuminance(backgroundColor);\n const lum2 = NeonColorUtils.relativeLuminance(textColor);\n\n const lightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n\n const contrast = (lightest + 0.05) / (darkest + 0.05);\n\n return Math.floor(contrast * 100) / 100;\n }\n\n private static labToXyz(t: number) {\n return t > NeonColorUtils.labT1 ? t * t * t : NeonColorUtils.labT2 * (t - NeonColorUtils.labT0);\n }\n\n private static xyzToRgb(r: number) {\n return r <= 0.00304 ? 255 * 12.92 * r : 255 * (1.055 * Math.pow(r, 1 / 2.4) - 0.055);\n }\n\n private static labToRgb(l: number, a: number, b: number): Array<number> {\n const y0 = (l + 16) / 116;\n const x0 = y0 + a / 500;\n const z0 = y0 - b / 200;\n\n const x1 = NeonColorUtils.labXn * NeonColorUtils.labToXyz(x0);\n const y1 = NeonColorUtils.labYn * NeonColorUtils.labToXyz(y0);\n const z1 = NeonColorUtils.labZn * NeonColorUtils.labToXyz(z0);\n const r = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(3.2404542 * x1 - 1.5371385 * y1 - 0.4985314 * z1))),\n ); // D65 -> sRGB\n const g = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(-0.969266 * x1 + 1.8760108 * y1 + 0.041556 * z1))),\n );\n const b_ = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(0.0556434 * x1 - 0.2040259 * y1 + 1.0572252 * z1))),\n );\n\n return [r, g, b_];\n }\n\n private static hclToLab(h: number, c: number, l: number) {\n const hue = h * NeonColorUtils.degreesToRadians;\n return [l, Math.cos(hue) * c, Math.sin(hue) * c];\n }\n\n private static hclToRgb(h: number, c: number, l: number): Array<number> {\n const [l_, a, b] = NeonColorUtils.hclToLab(h, c, l);\n return NeonColorUtils.labToRgb(l_, a, b);\n }\n\n private static lightReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness up if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance + 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n\n private static darkReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness down if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance - 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n}\n"],"names":["_NeonColorUtils","r","g","b","a","v","hexString","rgb","r1","g1","b1","x","y","z","l","lab","rgb1","rgb2","ratio","result","lum1","lum2","brightest","darkest","rHex","gHex","bHex","referenceColor","darkTextHex","lightTextHex","referenceRgb","darkTextRgb","lightTextRgb","hue","_rest","_l1Hue","l1Chroma","l1Luminance","_d1Hue","_d1Chroma","d1Luminance","chromaCurve","luminanceCurve","chroma","lStep","dStep","lightLuminance","darkLuminance","t","value","v1","h","channel","backgroundColor","textColor","lightest","contrast","y0","x0","z0","x1","y1","z1","b_","c","l_","backgroundRgb","textRgb","luminance","__publicField","NeonColorUtils"],"mappings":"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"}
1
+ {"version":3,"file":"NeonColorUtils.cjs.js","sources":["../../../src/common/utils/NeonColorUtils.ts"],"sourcesContent":["import type { NeonContrastAccessibility } from '@/common/models/NeonContrastAccessibility';\n\n/**\n * Utility class with helpers for calculating relative contrast & determining accessibility.\n * @ignore INTERNAL USE ONLY. This logic is specifically for the palette generator & is not intended for use elsewhere.\n */\nexport class NeonColorUtils {\n private static red = 0.2126;\n private static green = 0.7152;\n private static blue = 0.0722;\n private static labXn = 0.95047;\n private static labYn = 1;\n private static labZn = 1.08883;\n private static labT0 = 0.137931034; // 4 / 29\n private static labT1 = 0.206896552; // 6 / 29\n private static labT2 = 0.12841855; // 3 * t1 * t1\n private static labT3 = 0.008856452; // t1 * t1 * t1\n private static degreesToRadians = Math.PI / 180;\n private static radiansToDegrees = 180 / Math.PI;\n\n private static gamma = 2.4;\n\n /**\n * Calculate luminance from RGB color Array.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns The luminance.\n */\n public static luminance([r, g, b]: Array<number>) {\n const a = [r, g, b].map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, NeonColorUtils.gamma);\n });\n return a[0] * NeonColorUtils.red + a[1] * NeonColorUtils.green + a[2] * NeonColorUtils.blue;\n }\n\n /**\n * Hex color string to RGB Array.\n *\n * @param hexString Hex color string to transform.\n *\n * @returns RGB color array.\n */\n public static toRgb(hexString: string): Array<number> {\n return [\n Number.parseInt(hexString.substring(1, 3), 16),\n Number.parseInt(hexString.substring(3, 5), 16),\n Number.parseInt(hexString.substring(5, 7), 16),\n ];\n }\n\n /**\n * Convert RGB color array to xyz color space.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns xyz color value.\n */\n public static rgbToXyz(rgb: Array<number>): Array<number> {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.rgbValueToXyz(r);\n const g1 = NeonColorUtils.rgbValueToXyz(g);\n const b1 = NeonColorUtils.rgbValueToXyz(b);\n\n const x = NeonColorUtils.xyzToLab((0.4124564 * r1 + 0.3575761 * g1 + 0.1804375 * b1) / NeonColorUtils.labXn);\n const y = NeonColorUtils.xyzToLab((0.2126729 * r1 + 0.7151522 * g1 + 0.072175 * b1) / NeonColorUtils.labYn);\n const z = NeonColorUtils.xyzToLab((0.0193339 * r1 + 0.119192 * g1 + 0.9503041 * b1) / NeonColorUtils.labZn);\n\n return [x, y, z];\n }\n\n /**\n * Convert RGB color array to Lab color space.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns Lab color value.\n */\n public static rgbToLab(rgb: Array<number>): Array<number> {\n const [x, y, z] = NeonColorUtils.rgbToXyz(rgb);\n const l = 116 * y - 16;\n return [Math.max(l, 0), 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Convert RGB color array to Hcl color space.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns Hcl color value.\n */\n public static rgbToHcl(rgb: Array<number>): Array<number> {\n const lab = NeonColorUtils.rgbToLab(rgb);\n return NeonColorUtils.labToHcl(lab);\n }\n\n /**\n * Check two hex colors for their contrast accessibility.\n *\n * @param hex1 Hex color 1.\n * @param hex2 Hex color 2.\n *\n * @returns {NeonContrastAccessibility} Accessibility data.\n */\n public static isAccessible(rgb1: string, rgb2: string): NeonContrastAccessibility {\n const ratio = NeonColorUtils.contrast(NeonColorUtils.toRgb(rgb1), NeonColorUtils.toRgb(rgb2));\n\n const result = {\n largeAA: false,\n largeAAA: false,\n normalAA: false,\n normalAAA: false,\n ratio: Math.round(100 * ratio) / 100,\n };\n\n if (ratio >= 3) {\n result.largeAA = true;\n\n if (ratio >= 4.5) {\n result.normalAA = true;\n result.largeAAA = true;\n\n if (ratio >= 7) {\n result.normalAAA = true;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Calculate the contrast ratio between two colors.\n *\n * @param rgb1 First color.\n * @param rgb2 Second color.\n *\n * @returns The contrast ratio (x:1).\n */\n public static contrast(rgb1: Array<number>, rgb2: Array<number>) {\n const lum1 = NeonColorUtils.luminance(rgb1);\n const lum2 = NeonColorUtils.luminance(rgb2);\n const brightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n return (brightest + 0.05) / (darkest + 0.05);\n }\n\n /**\n * Convert RGB color array to hex color string.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns hex color string.\n */\n public static rgbToHex(rgb: Array<number>): string {\n const [r, g, b] = rgb;\n const rHex = r.toString(16);\n const gHex = g.toString(16);\n const bHex = b.toString(16);\n return `#${rHex.length === 1 ? `0${rHex}` : rHex}${gHex.length === 1 ? `0${gHex}` : gHex}${\n bHex.length === 1 ? `0${bHex}` : bHex\n }`;\n }\n\n /**\n * Generate a Neon color palette with 5 light & 5 dark steps (l1-l5 & d1-d5) from a reference color. For both L1 & D1\n * steps this will search for the closest match to the reference color that meets at least AA contrast requirements.\n * The L2-L5 & D2-D5 steps are then generated based on a Hcl curve.\n *\n * @param referenceColor Hex string of the reference color from which to generate the palette.\n * @param darkTextHex The dark text color hex string for calculating the contrast ratio for L1-L5 steps.\n * @param lightTextHex The light text color hex string for calculating the contrast ratio for D1-D5 steps.\n *\n * @returns A map of the palette's color steps to hex values.\n */\n public static generatePalette(\n referenceColor: string,\n darkTextHex: string,\n lightTextHex: string,\n ): Record<string, string> {\n const referenceRgb = NeonColorUtils.toRgb(referenceColor);\n const [r, g, b] = referenceRgb;\n const darkTextRgb = NeonColorUtils.toRgb(darkTextHex);\n const lightTextRgb = NeonColorUtils.toRgb(lightTextHex);\n\n const [hue, _rest] = NeonColorUtils.rgbToHcl(referenceRgb);\n\n const [_l1Hue, l1Chroma, l1Luminance] = NeonColorUtils.lightReferenceColor(referenceRgb, darkTextRgb);\n const [_d1Hue, _d1Chroma, d1Luminance] = NeonColorUtils.darkReferenceColor(referenceRgb, lightTextRgb);\n\n const chromaCurve = NeonColorUtils.generateChromaCurve(l1Chroma);\n const luminanceCurve = NeonColorUtils.generateLuminanceCurve(l1Luminance, d1Luminance);\n\n // if blue is the dominant channel then adjust hue so it's not too purple\n // TODO: rework for some blue colors as they are still too purple\n if (b > 2 * g && b > 2 * r) {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 30, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 25, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 20, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 15, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[9], luminanceCurve[9])),\n };\n } else {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[9], luminanceCurve[9])),\n };\n }\n }\n\n private static generateChromaCurve(chroma: number) {\n const lStep = 0.25 * Math.abs(chroma - 10);\n const dStep = 0.25 * Math.abs(chroma - 10);\n\n return [\n chroma - 4 * lStep,\n chroma - 3 * lStep + 4,\n chroma - 2 * lStep + 6,\n chroma - lStep + 4,\n chroma,\n chroma,\n chroma - dStep + 4,\n chroma - 2 * dStep + 6,\n chroma - 3 * dStep + 4,\n chroma - 4 * dStep,\n ];\n }\n\n private static generateLuminanceCurve(lightLuminance: number, darkLuminance: number) {\n const lStep = 0.25 * (96 - lightLuminance);\n const dStep = 0.25 * (darkLuminance - 10);\n\n return [\n lightLuminance + 4 * lStep,\n lightLuminance + 3 * lStep,\n lightLuminance + 2 * lStep,\n lightLuminance + lStep,\n lightLuminance,\n darkLuminance,\n darkLuminance - dStep + 2,\n darkLuminance - 2 * dStep + 1,\n darkLuminance - 3 * dStep - 1,\n darkLuminance - 4 * dStep,\n ];\n }\n\n private static xyzToLab(t: number) {\n return t > NeonColorUtils.labT3 ? Math.pow(t, 1 / 3) : t / NeonColorUtils.labT2 + NeonColorUtils.labT0;\n }\n\n private static rgbValueToXyz(value: number) {\n const v1 = value / 255;\n return v1 <= 0.04045 ? v1 / 12.92 : Math.pow((v1 + 0.055) / 1.055, 2.4);\n }\n\n private static labToHcl(lab: Array<number>) {\n const [l, a, b] = lab;\n const c = Math.sqrt(a * a + b * b);\n const h = (Math.atan2(b, a) * NeonColorUtils.radiansToDegrees + 360) % 360;\n return [Math.round(h), c, l];\n }\n\n private static luminanceByChannel(channel: number) {\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }\n\n private static relativeLuminance(rgb: Array<number>) {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.luminanceByChannel(r / 255);\n const g1 = NeonColorUtils.luminanceByChannel(g / 255);\n const b1 = NeonColorUtils.luminanceByChannel(b / 255);\n return 0.2126 * r1 + 0.7152 * g1 + 0.0722 * b1;\n }\n\n private static contrastRatio(backgroundColor: Array<number>, textColor: Array<number>) {\n const lum1 = NeonColorUtils.relativeLuminance(backgroundColor);\n const lum2 = NeonColorUtils.relativeLuminance(textColor);\n\n const lightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n\n const contrast = (lightest + 0.05) / (darkest + 0.05);\n\n return Math.floor(contrast * 100) / 100;\n }\n\n private static labToXyz(t: number) {\n return t > NeonColorUtils.labT1 ? t * t * t : NeonColorUtils.labT2 * (t - NeonColorUtils.labT0);\n }\n\n private static xyzToRgb(r: number) {\n return r <= 0.00304 ? 255 * 12.92 * r : 255 * (1.055 * Math.pow(r, 1 / 2.4) - 0.055);\n }\n\n private static labToRgb(l: number, a: number, b: number): Array<number> {\n const y0 = (l + 16) / 116;\n const x0 = y0 + a / 500;\n const z0 = y0 - b / 200;\n\n const x1 = NeonColorUtils.labXn * NeonColorUtils.labToXyz(x0);\n const y1 = NeonColorUtils.labYn * NeonColorUtils.labToXyz(y0);\n const z1 = NeonColorUtils.labZn * NeonColorUtils.labToXyz(z0);\n const r = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(3.2404542 * x1 - 1.5371385 * y1 - 0.4985314 * z1))),\n ); // D65 -> sRGB\n const g = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(-0.969266 * x1 + 1.8760108 * y1 + 0.041556 * z1))),\n );\n const b_ = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(0.0556434 * x1 - 0.2040259 * y1 + 1.0572252 * z1))),\n );\n\n return [r, g, b_];\n }\n\n private static hclToLab(h: number, c: number, l: number) {\n const hue = h * NeonColorUtils.degreesToRadians;\n return [l, Math.cos(hue) * c, Math.sin(hue) * c];\n }\n\n private static hclToRgb(h: number, c: number, l: number): Array<number> {\n const [l_, a, b] = NeonColorUtils.hclToLab(h, c, l);\n return NeonColorUtils.labToRgb(l_, a, b);\n }\n\n private static lightReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness up if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance + 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n\n private static darkReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness down if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance - 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n}\n"],"names":["_NeonColorUtils","r","g","b","a","v","hexString","rgb","r1","g1","b1","x","y","z","l","lab","rgb1","rgb2","ratio","result","lum1","lum2","brightest","darkest","rHex","gHex","bHex","referenceColor","darkTextHex","lightTextHex","referenceRgb","darkTextRgb","lightTextRgb","hue","_rest","_l1Hue","l1Chroma","l1Luminance","_d1Hue","_d1Chroma","d1Luminance","chromaCurve","luminanceCurve","chroma","lStep","dStep","lightLuminance","darkLuminance","t","value","v1","h","channel","backgroundColor","textColor","lightest","contrast","y0","x0","z0","x1","y1","z1","b_","c","l_","backgroundRgb","textRgb","luminance","__publicField","NeonColorUtils"],"mappings":"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"}
@@ -5,11 +5,11 @@ const t = class t {
5
5
  /**
6
6
  * Calculate luminance from RGB color Array.
7
7
  *
8
- * @param r {number} Red value 0-255.
9
- * @param g {number} Green value 0-255.
10
- * @param b {number} Blue value 0-255.
8
+ * @param r Red value 0-255.
9
+ * @param g Green value 0-255.
10
+ * @param b Blue value 0-255.
11
11
  *
12
- * @returns {number} The luminance.
12
+ * @returns The luminance.
13
13
  */
14
14
  static luminance([e, a, r]) {
15
15
  const n = [e, a, r].map((c) => (c /= 255, c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, t.gamma)));
@@ -18,9 +18,9 @@ const t = class t {
18
18
  /**
19
19
  * Hex color string to RGB Array.
20
20
  *
21
- * @param hexString {string} Hex color string to transform.
21
+ * @param hexString Hex color string to transform.
22
22
  *
23
- * @returns {Array<number>} RGB color array.
23
+ * @returns RGB color array.
24
24
  */
25
25
  static toRgb(e) {
26
26
  return [
@@ -32,11 +32,11 @@ const t = class t {
32
32
  /**
33
33
  * Convert RGB color array to xyz color space.
34
34
  *
35
- * @param r {number} Red value 0-255.
36
- * @param g {number} Green value 0-255.
37
- * @param b {number} Blue value 0-255.
35
+ * @param r Red value 0-255.
36
+ * @param g Green value 0-255.
37
+ * @param b Blue value 0-255.
38
38
  *
39
- * @returns {Array<number>} xyz color value.
39
+ * @returns xyz color value.
40
40
  */
41
41
  static rgbToXyz(e) {
42
42
  const [a, r, n] = e, c = t.rgbValueToXyz(a), b = t.rgbValueToXyz(r), o = t.rgbValueToXyz(n), u = t.xyzToLab((0.4124564 * c + 0.3575761 * b + 0.1804375 * o) / t.labXn), h = t.xyzToLab((0.2126729 * c + 0.7151522 * b + 0.072175 * o) / t.labYn), s = t.xyzToLab((0.0193339 * c + 0.119192 * b + 0.9503041 * o) / t.labZn);
@@ -45,11 +45,11 @@ const t = class t {
45
45
  /**
46
46
  * Convert RGB color array to Lab color space.
47
47
  *
48
- * @param r {number} Red value 0-255.
49
- * @param g {number} Green value 0-255.
50
- * @param b {number} Blue value 0-255.
48
+ * @param r Red value 0-255.
49
+ * @param g Green value 0-255.
50
+ * @param b Blue value 0-255.
51
51
  *
52
- * @returns {Array<number>} Lab color value.
52
+ * @returns Lab color value.
53
53
  */
54
54
  static rgbToLab(e) {
55
55
  const [a, r, n] = t.rgbToXyz(e), c = 116 * r - 16;
@@ -58,11 +58,11 @@ const t = class t {
58
58
  /**
59
59
  * Convert RGB color array to Hcl color space.
60
60
  *
61
- * @param r {number} Red value 0-255.
62
- * @param g {number} Green value 0-255.
63
- * @param b {number} Blue value 0-255.
61
+ * @param r Red value 0-255.
62
+ * @param g Green value 0-255.
63
+ * @param b Blue value 0-255.
64
64
  *
65
- * @returns {Array<number>} Hcl color value.
65
+ * @returns Hcl color value.
66
66
  */
67
67
  static rgbToHcl(e) {
68
68
  const a = t.rgbToLab(e);
@@ -71,8 +71,8 @@ const t = class t {
71
71
  /**
72
72
  * Check two hex colors for their contrast accessibility.
73
73
  *
74
- * @param hex1 {string} Hex color 1.
75
- * @param hex2 {string} Hex color 2.
74
+ * @param hex1 Hex color 1.
75
+ * @param hex2 Hex color 2.
76
76
  *
77
77
  * @returns {NeonContrastAccessibility} Accessibility data.
78
78
  */
@@ -89,10 +89,10 @@ const t = class t {
89
89
  /**
90
90
  * Calculate the contrast ratio between two colors.
91
91
  *
92
- * @param rgb1 {Array<number>} First color.
93
- * @param rgb2 {Array<number>} Second color.
92
+ * @param rgb1 First color.
93
+ * @param rgb2 Second color.
94
94
  *
95
- * @returns {number} The contrast ratio (x:1).
95
+ * @returns The contrast ratio (x:1).
96
96
  */
97
97
  static contrast(e, a) {
98
98
  const r = t.luminance(e), n = t.luminance(a), c = Math.max(r, n), b = Math.min(r, n);
@@ -101,11 +101,11 @@ const t = class t {
101
101
  /**
102
102
  * Convert RGB color array to hex color string.
103
103
  *
104
- * @param r {number} Red value 0-255.
105
- * @param g {number} Green value 0-255.
106
- * @param b {number} Blue value 0-255.
104
+ * @param r Red value 0-255.
105
+ * @param g Green value 0-255.
106
+ * @param b Blue value 0-255.
107
107
  *
108
- * @returns {string} hex color string.
108
+ * @returns hex color string.
109
109
  */
110
110
  static rgbToHex(e) {
111
111
  const [a, r, n] = e, c = a.toString(16), b = r.toString(16), o = n.toString(16);
@@ -116,11 +116,11 @@ const t = class t {
116
116
  * steps this will search for the closest match to the reference color that meets at least AA contrast requirements.
117
117
  * The L2-L5 & D2-D5 steps are then generated based on a Hcl curve.
118
118
  *
119
- * @param referenceColor {string} Hex string of the reference color from which to generate the palette.
120
- * @param darkTextHex {string} The dark text color hex string for calculating the contrast ratio for L1-L5 steps.
121
- * @param lightTextHex {string} The light text color hex string for calculating the contrast ratio for D1-D5 steps.
119
+ * @param referenceColor Hex string of the reference color from which to generate the palette.
120
+ * @param darkTextHex The dark text color hex string for calculating the contrast ratio for L1-L5 steps.
121
+ * @param lightTextHex The light text color hex string for calculating the contrast ratio for D1-D5 steps.
122
122
  *
123
- * @returns {Record<string, string>} A map of the palette's color steps to hex values.
123
+ * @returns A map of the palette's color steps to hex values.
124
124
  */
125
125
  static generatePalette(e, a, r) {
126
126
  const n = t.toRgb(e), [c, b, o] = n, u = t.toRgb(a), h = t.toRgb(r), [s, R] = t.rgbToHcl(n), [x, m, M] = t.lightReferenceColor(n, u), [A, f, d] = t.darkReferenceColor(n, h), l = t.generateChromaCurve(m), g = t.generateLuminanceCurve(M, d);
@@ -1 +1 @@
1
- {"version":3,"file":"NeonColorUtils.es.js","sources":["../../../src/common/utils/NeonColorUtils.ts"],"sourcesContent":["import type { NeonContrastAccessibility } from '@/common/models/NeonContrastAccessibility';\n\n/**\n * Utility class with helpers for calculating relative contrast & determining accessibility.\n * @ignore INTERNAL USE ONLY. This logic is specifically for the palette generator & is not intended for use elsewhere.\n */\nexport class NeonColorUtils {\n private static red = 0.2126;\n private static green = 0.7152;\n private static blue = 0.0722;\n private static labXn = 0.95047;\n private static labYn = 1;\n private static labZn = 1.08883;\n private static labT0 = 0.137931034; // 4 / 29\n private static labT1 = 0.206896552; // 6 / 29\n private static labT2 = 0.12841855; // 3 * t1 * t1\n private static labT3 = 0.008856452; // t1 * t1 * t1\n private static degreesToRadians = Math.PI / 180;\n private static radiansToDegrees = 180 / Math.PI;\n\n private static gamma = 2.4;\n\n /**\n * Calculate luminance from RGB color Array.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {number} The luminance.\n */\n public static luminance([r, g, b]: Array<number>) {\n const a = [r, g, b].map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, NeonColorUtils.gamma);\n });\n return a[0] * NeonColorUtils.red + a[1] * NeonColorUtils.green + a[2] * NeonColorUtils.blue;\n }\n\n /**\n * Hex color string to RGB Array.\n *\n * @param hexString {string} Hex color string to transform.\n *\n * @returns {Array<number>} RGB color array.\n */\n public static toRgb(hexString: string): Array<number> {\n return [\n Number.parseInt(hexString.substring(1, 3), 16),\n Number.parseInt(hexString.substring(3, 5), 16),\n Number.parseInt(hexString.substring(5, 7), 16),\n ];\n }\n\n /**\n * Convert RGB color array to xyz color space.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {Array<number>} xyz color value.\n */\n public static rgbToXyz(rgb: Array<number>): Array<number> {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.rgbValueToXyz(r);\n const g1 = NeonColorUtils.rgbValueToXyz(g);\n const b1 = NeonColorUtils.rgbValueToXyz(b);\n\n const x = NeonColorUtils.xyzToLab((0.4124564 * r1 + 0.3575761 * g1 + 0.1804375 * b1) / NeonColorUtils.labXn);\n const y = NeonColorUtils.xyzToLab((0.2126729 * r1 + 0.7151522 * g1 + 0.072175 * b1) / NeonColorUtils.labYn);\n const z = NeonColorUtils.xyzToLab((0.0193339 * r1 + 0.119192 * g1 + 0.9503041 * b1) / NeonColorUtils.labZn);\n\n return [x, y, z];\n }\n\n /**\n * Convert RGB color array to Lab color space.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {Array<number>} Lab color value.\n */\n public static rgbToLab(rgb: Array<number>): Array<number> {\n const [x, y, z] = NeonColorUtils.rgbToXyz(rgb);\n const l = 116 * y - 16;\n return [Math.max(l, 0), 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Convert RGB color array to Hcl color space.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {Array<number>} Hcl color value.\n */\n public static rgbToHcl(rgb: Array<number>): Array<number> {\n const lab = NeonColorUtils.rgbToLab(rgb);\n return NeonColorUtils.labToHcl(lab);\n }\n\n /**\n * Check two hex colors for their contrast accessibility.\n *\n * @param hex1 {string} Hex color 1.\n * @param hex2 {string} Hex color 2.\n *\n * @returns {NeonContrastAccessibility} Accessibility data.\n */\n public static isAccessible(rgb1: string, rgb2: string): NeonContrastAccessibility {\n const ratio = NeonColorUtils.contrast(NeonColorUtils.toRgb(rgb1), NeonColorUtils.toRgb(rgb2));\n\n const result = {\n largeAA: false,\n largeAAA: false,\n normalAA: false,\n normalAAA: false,\n ratio: Math.round(100 * ratio) / 100,\n };\n\n if (ratio >= 3) {\n result.largeAA = true;\n\n if (ratio >= 4.5) {\n result.normalAA = true;\n result.largeAAA = true;\n\n if (ratio >= 7) {\n result.normalAAA = true;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Calculate the contrast ratio between two colors.\n *\n * @param rgb1 {Array<number>} First color.\n * @param rgb2 {Array<number>} Second color.\n *\n * @returns {number} The contrast ratio (x:1).\n */\n public static contrast(rgb1: Array<number>, rgb2: Array<number>) {\n const lum1 = NeonColorUtils.luminance(rgb1);\n const lum2 = NeonColorUtils.luminance(rgb2);\n const brightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n return (brightest + 0.05) / (darkest + 0.05);\n }\n\n /**\n * Convert RGB color array to hex color string.\n *\n * @param r {number} Red value 0-255.\n * @param g {number} Green value 0-255.\n * @param b {number} Blue value 0-255.\n *\n * @returns {string} hex color string.\n */\n public static rgbToHex(rgb: Array<number>): string {\n const [r, g, b] = rgb;\n const rHex = r.toString(16);\n const gHex = g.toString(16);\n const bHex = b.toString(16);\n return `#${rHex.length === 1 ? `0${rHex}` : rHex}${gHex.length === 1 ? `0${gHex}` : gHex}${\n bHex.length === 1 ? `0${bHex}` : bHex\n }`;\n }\n\n /**\n * Generate a Neon color palette with 5 light & 5 dark steps (l1-l5 & d1-d5) from a reference color. For both L1 & D1\n * steps this will search for the closest match to the reference color that meets at least AA contrast requirements.\n * The L2-L5 & D2-D5 steps are then generated based on a Hcl curve.\n *\n * @param referenceColor {string} Hex string of the reference color from which to generate the palette.\n * @param darkTextHex {string} The dark text color hex string for calculating the contrast ratio for L1-L5 steps.\n * @param lightTextHex {string} The light text color hex string for calculating the contrast ratio for D1-D5 steps.\n *\n * @returns {Record<string, string>} A map of the palette's color steps to hex values.\n */\n public static generatePalette(\n referenceColor: string,\n darkTextHex: string,\n lightTextHex: string,\n ): Record<string, string> {\n const referenceRgb = NeonColorUtils.toRgb(referenceColor);\n const [r, g, b] = referenceRgb;\n const darkTextRgb = NeonColorUtils.toRgb(darkTextHex);\n const lightTextRgb = NeonColorUtils.toRgb(lightTextHex);\n\n const [hue, _rest] = NeonColorUtils.rgbToHcl(referenceRgb);\n\n const [_l1Hue, l1Chroma, l1Luminance] = NeonColorUtils.lightReferenceColor(referenceRgb, darkTextRgb);\n const [_d1Hue, _d1Chroma, d1Luminance] = NeonColorUtils.darkReferenceColor(referenceRgb, lightTextRgb);\n\n const chromaCurve = NeonColorUtils.generateChromaCurve(l1Chroma);\n const luminanceCurve = NeonColorUtils.generateLuminanceCurve(l1Luminance, d1Luminance);\n\n // if blue is the dominant channel then adjust hue so it's not too purple\n // TODO: rework for some blue colors as they are still too purple\n if (b > 2 * g && b > 2 * r) {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 30, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 25, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 20, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 15, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[9], luminanceCurve[9])),\n };\n } else {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[9], luminanceCurve[9])),\n };\n }\n }\n\n private static generateChromaCurve(chroma: number) {\n const lStep = 0.25 * Math.abs(chroma - 10);\n const dStep = 0.25 * Math.abs(chroma - 10);\n\n return [\n chroma - 4 * lStep,\n chroma - 3 * lStep + 4,\n chroma - 2 * lStep + 6,\n chroma - lStep + 4,\n chroma,\n chroma,\n chroma - dStep + 4,\n chroma - 2 * dStep + 6,\n chroma - 3 * dStep + 4,\n chroma - 4 * dStep,\n ];\n }\n\n private static generateLuminanceCurve(lightLuminance: number, darkLuminance: number) {\n const lStep = 0.25 * (96 - lightLuminance);\n const dStep = 0.25 * (darkLuminance - 10);\n\n return [\n lightLuminance + 4 * lStep,\n lightLuminance + 3 * lStep,\n lightLuminance + 2 * lStep,\n lightLuminance + lStep,\n lightLuminance,\n darkLuminance,\n darkLuminance - dStep + 2,\n darkLuminance - 2 * dStep + 1,\n darkLuminance - 3 * dStep - 1,\n darkLuminance - 4 * dStep,\n ];\n }\n\n private static xyzToLab(t: number) {\n return t > NeonColorUtils.labT3 ? Math.pow(t, 1 / 3) : t / NeonColorUtils.labT2 + NeonColorUtils.labT0;\n }\n\n private static rgbValueToXyz(value: number) {\n const v1 = value / 255;\n return v1 <= 0.04045 ? v1 / 12.92 : Math.pow((v1 + 0.055) / 1.055, 2.4);\n }\n\n private static labToHcl(lab: Array<number>) {\n const [l, a, b] = lab;\n const c = Math.sqrt(a * a + b * b);\n const h = (Math.atan2(b, a) * NeonColorUtils.radiansToDegrees + 360) % 360;\n return [Math.round(h), c, l];\n }\n\n private static luminanceByChannel(channel: number) {\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }\n\n private static relativeLuminance(rgb: Array<number>) {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.luminanceByChannel(r / 255);\n const g1 = NeonColorUtils.luminanceByChannel(g / 255);\n const b1 = NeonColorUtils.luminanceByChannel(b / 255);\n return 0.2126 * r1 + 0.7152 * g1 + 0.0722 * b1;\n }\n\n private static contrastRatio(backgroundColor: Array<number>, textColor: Array<number>) {\n const lum1 = NeonColorUtils.relativeLuminance(backgroundColor);\n const lum2 = NeonColorUtils.relativeLuminance(textColor);\n\n const lightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n\n const contrast = (lightest + 0.05) / (darkest + 0.05);\n\n return Math.floor(contrast * 100) / 100;\n }\n\n private static labToXyz(t: number) {\n return t > NeonColorUtils.labT1 ? t * t * t : NeonColorUtils.labT2 * (t - NeonColorUtils.labT0);\n }\n\n private static xyzToRgb(r: number) {\n return r <= 0.00304 ? 255 * 12.92 * r : 255 * (1.055 * Math.pow(r, 1 / 2.4) - 0.055);\n }\n\n private static labToRgb(l: number, a: number, b: number): Array<number> {\n const y0 = (l + 16) / 116;\n const x0 = y0 + a / 500;\n const z0 = y0 - b / 200;\n\n const x1 = NeonColorUtils.labXn * NeonColorUtils.labToXyz(x0);\n const y1 = NeonColorUtils.labYn * NeonColorUtils.labToXyz(y0);\n const z1 = NeonColorUtils.labZn * NeonColorUtils.labToXyz(z0);\n const r = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(3.2404542 * x1 - 1.5371385 * y1 - 0.4985314 * z1))),\n ); // D65 -> sRGB\n const g = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(-0.969266 * x1 + 1.8760108 * y1 + 0.041556 * z1))),\n );\n const b_ = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(0.0556434 * x1 - 0.2040259 * y1 + 1.0572252 * z1))),\n );\n\n return [r, g, b_];\n }\n\n private static hclToLab(h: number, c: number, l: number) {\n const hue = h * NeonColorUtils.degreesToRadians;\n return [l, Math.cos(hue) * c, Math.sin(hue) * c];\n }\n\n private static hclToRgb(h: number, c: number, l: number): Array<number> {\n const [l_, a, b] = NeonColorUtils.hclToLab(h, c, l);\n return NeonColorUtils.labToRgb(l_, a, b);\n }\n\n private static lightReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness up if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance + 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n\n private static darkReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness down if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance - 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n}\n"],"names":["_NeonColorUtils","r","g","b","a","v","hexString","rgb","r1","g1","b1","x","y","z","l","lab","rgb1","rgb2","ratio","result","lum1","lum2","brightest","darkest","rHex","gHex","bHex","referenceColor","darkTextHex","lightTextHex","referenceRgb","darkTextRgb","lightTextRgb","hue","_rest","_l1Hue","l1Chroma","l1Luminance","_d1Hue","_d1Chroma","d1Luminance","chromaCurve","luminanceCurve","chroma","lStep","dStep","lightLuminance","darkLuminance","t","value","v1","h","channel","backgroundColor","textColor","lightest","contrast","y0","x0","z0","x1","y1","z1","b_","c","l_","backgroundRgb","textRgb","luminance","__publicField","NeonColorUtils"],"mappings":"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"}
1
+ {"version":3,"file":"NeonColorUtils.es.js","sources":["../../../src/common/utils/NeonColorUtils.ts"],"sourcesContent":["import type { NeonContrastAccessibility } from '@/common/models/NeonContrastAccessibility';\n\n/**\n * Utility class with helpers for calculating relative contrast & determining accessibility.\n * @ignore INTERNAL USE ONLY. This logic is specifically for the palette generator & is not intended for use elsewhere.\n */\nexport class NeonColorUtils {\n private static red = 0.2126;\n private static green = 0.7152;\n private static blue = 0.0722;\n private static labXn = 0.95047;\n private static labYn = 1;\n private static labZn = 1.08883;\n private static labT0 = 0.137931034; // 4 / 29\n private static labT1 = 0.206896552; // 6 / 29\n private static labT2 = 0.12841855; // 3 * t1 * t1\n private static labT3 = 0.008856452; // t1 * t1 * t1\n private static degreesToRadians = Math.PI / 180;\n private static radiansToDegrees = 180 / Math.PI;\n\n private static gamma = 2.4;\n\n /**\n * Calculate luminance from RGB color Array.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns The luminance.\n */\n public static luminance([r, g, b]: Array<number>) {\n const a = [r, g, b].map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, NeonColorUtils.gamma);\n });\n return a[0] * NeonColorUtils.red + a[1] * NeonColorUtils.green + a[2] * NeonColorUtils.blue;\n }\n\n /**\n * Hex color string to RGB Array.\n *\n * @param hexString Hex color string to transform.\n *\n * @returns RGB color array.\n */\n public static toRgb(hexString: string): Array<number> {\n return [\n Number.parseInt(hexString.substring(1, 3), 16),\n Number.parseInt(hexString.substring(3, 5), 16),\n Number.parseInt(hexString.substring(5, 7), 16),\n ];\n }\n\n /**\n * Convert RGB color array to xyz color space.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns xyz color value.\n */\n public static rgbToXyz(rgb: Array<number>): Array<number> {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.rgbValueToXyz(r);\n const g1 = NeonColorUtils.rgbValueToXyz(g);\n const b1 = NeonColorUtils.rgbValueToXyz(b);\n\n const x = NeonColorUtils.xyzToLab((0.4124564 * r1 + 0.3575761 * g1 + 0.1804375 * b1) / NeonColorUtils.labXn);\n const y = NeonColorUtils.xyzToLab((0.2126729 * r1 + 0.7151522 * g1 + 0.072175 * b1) / NeonColorUtils.labYn);\n const z = NeonColorUtils.xyzToLab((0.0193339 * r1 + 0.119192 * g1 + 0.9503041 * b1) / NeonColorUtils.labZn);\n\n return [x, y, z];\n }\n\n /**\n * Convert RGB color array to Lab color space.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns Lab color value.\n */\n public static rgbToLab(rgb: Array<number>): Array<number> {\n const [x, y, z] = NeonColorUtils.rgbToXyz(rgb);\n const l = 116 * y - 16;\n return [Math.max(l, 0), 500 * (x - y), 200 * (y - z)];\n }\n\n /**\n * Convert RGB color array to Hcl color space.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns Hcl color value.\n */\n public static rgbToHcl(rgb: Array<number>): Array<number> {\n const lab = NeonColorUtils.rgbToLab(rgb);\n return NeonColorUtils.labToHcl(lab);\n }\n\n /**\n * Check two hex colors for their contrast accessibility.\n *\n * @param hex1 Hex color 1.\n * @param hex2 Hex color 2.\n *\n * @returns {NeonContrastAccessibility} Accessibility data.\n */\n public static isAccessible(rgb1: string, rgb2: string): NeonContrastAccessibility {\n const ratio = NeonColorUtils.contrast(NeonColorUtils.toRgb(rgb1), NeonColorUtils.toRgb(rgb2));\n\n const result = {\n largeAA: false,\n largeAAA: false,\n normalAA: false,\n normalAAA: false,\n ratio: Math.round(100 * ratio) / 100,\n };\n\n if (ratio >= 3) {\n result.largeAA = true;\n\n if (ratio >= 4.5) {\n result.normalAA = true;\n result.largeAAA = true;\n\n if (ratio >= 7) {\n result.normalAAA = true;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Calculate the contrast ratio between two colors.\n *\n * @param rgb1 First color.\n * @param rgb2 Second color.\n *\n * @returns The contrast ratio (x:1).\n */\n public static contrast(rgb1: Array<number>, rgb2: Array<number>) {\n const lum1 = NeonColorUtils.luminance(rgb1);\n const lum2 = NeonColorUtils.luminance(rgb2);\n const brightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n return (brightest + 0.05) / (darkest + 0.05);\n }\n\n /**\n * Convert RGB color array to hex color string.\n *\n * @param r Red value 0-255.\n * @param g Green value 0-255.\n * @param b Blue value 0-255.\n *\n * @returns hex color string.\n */\n public static rgbToHex(rgb: Array<number>): string {\n const [r, g, b] = rgb;\n const rHex = r.toString(16);\n const gHex = g.toString(16);\n const bHex = b.toString(16);\n return `#${rHex.length === 1 ? `0${rHex}` : rHex}${gHex.length === 1 ? `0${gHex}` : gHex}${\n bHex.length === 1 ? `0${bHex}` : bHex\n }`;\n }\n\n /**\n * Generate a Neon color palette with 5 light & 5 dark steps (l1-l5 & d1-d5) from a reference color. For both L1 & D1\n * steps this will search for the closest match to the reference color that meets at least AA contrast requirements.\n * The L2-L5 & D2-D5 steps are then generated based on a Hcl curve.\n *\n * @param referenceColor Hex string of the reference color from which to generate the palette.\n * @param darkTextHex The dark text color hex string for calculating the contrast ratio for L1-L5 steps.\n * @param lightTextHex The light text color hex string for calculating the contrast ratio for D1-D5 steps.\n *\n * @returns A map of the palette's color steps to hex values.\n */\n public static generatePalette(\n referenceColor: string,\n darkTextHex: string,\n lightTextHex: string,\n ): Record<string, string> {\n const referenceRgb = NeonColorUtils.toRgb(referenceColor);\n const [r, g, b] = referenceRgb;\n const darkTextRgb = NeonColorUtils.toRgb(darkTextHex);\n const lightTextRgb = NeonColorUtils.toRgb(lightTextHex);\n\n const [hue, _rest] = NeonColorUtils.rgbToHcl(referenceRgb);\n\n const [_l1Hue, l1Chroma, l1Luminance] = NeonColorUtils.lightReferenceColor(referenceRgb, darkTextRgb);\n const [_d1Hue, _d1Chroma, d1Luminance] = NeonColorUtils.darkReferenceColor(referenceRgb, lightTextRgb);\n\n const chromaCurve = NeonColorUtils.generateChromaCurve(l1Chroma);\n const luminanceCurve = NeonColorUtils.generateLuminanceCurve(l1Luminance, d1Luminance);\n\n // if blue is the dominant channel then adjust hue so it's not too purple\n // TODO: rework for some blue colors as they are still too purple\n if (b > 2 * g && b > 2 * r) {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 30, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 25, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 20, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 15, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue - 10, chromaCurve[9], luminanceCurve[9])),\n };\n } else {\n return {\n l5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[0], luminanceCurve[0])),\n l4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[1], luminanceCurve[1])),\n l3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[2], luminanceCurve[2])),\n l2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[3], luminanceCurve[3])),\n l1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[4], luminanceCurve[4])),\n d1: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[5], luminanceCurve[5])),\n d2: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[6], luminanceCurve[6])),\n d3: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[7], luminanceCurve[7])),\n d4: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[8], luminanceCurve[8])),\n d5: NeonColorUtils.rgbToHex(NeonColorUtils.hclToRgb(hue, chromaCurve[9], luminanceCurve[9])),\n };\n }\n }\n\n private static generateChromaCurve(chroma: number) {\n const lStep = 0.25 * Math.abs(chroma - 10);\n const dStep = 0.25 * Math.abs(chroma - 10);\n\n return [\n chroma - 4 * lStep,\n chroma - 3 * lStep + 4,\n chroma - 2 * lStep + 6,\n chroma - lStep + 4,\n chroma,\n chroma,\n chroma - dStep + 4,\n chroma - 2 * dStep + 6,\n chroma - 3 * dStep + 4,\n chroma - 4 * dStep,\n ];\n }\n\n private static generateLuminanceCurve(lightLuminance: number, darkLuminance: number) {\n const lStep = 0.25 * (96 - lightLuminance);\n const dStep = 0.25 * (darkLuminance - 10);\n\n return [\n lightLuminance + 4 * lStep,\n lightLuminance + 3 * lStep,\n lightLuminance + 2 * lStep,\n lightLuminance + lStep,\n lightLuminance,\n darkLuminance,\n darkLuminance - dStep + 2,\n darkLuminance - 2 * dStep + 1,\n darkLuminance - 3 * dStep - 1,\n darkLuminance - 4 * dStep,\n ];\n }\n\n private static xyzToLab(t: number) {\n return t > NeonColorUtils.labT3 ? Math.pow(t, 1 / 3) : t / NeonColorUtils.labT2 + NeonColorUtils.labT0;\n }\n\n private static rgbValueToXyz(value: number) {\n const v1 = value / 255;\n return v1 <= 0.04045 ? v1 / 12.92 : Math.pow((v1 + 0.055) / 1.055, 2.4);\n }\n\n private static labToHcl(lab: Array<number>) {\n const [l, a, b] = lab;\n const c = Math.sqrt(a * a + b * b);\n const h = (Math.atan2(b, a) * NeonColorUtils.radiansToDegrees + 360) % 360;\n return [Math.round(h), c, l];\n }\n\n private static luminanceByChannel(channel: number) {\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }\n\n private static relativeLuminance(rgb: Array<number>) {\n const [r, g, b] = rgb;\n const r1 = NeonColorUtils.luminanceByChannel(r / 255);\n const g1 = NeonColorUtils.luminanceByChannel(g / 255);\n const b1 = NeonColorUtils.luminanceByChannel(b / 255);\n return 0.2126 * r1 + 0.7152 * g1 + 0.0722 * b1;\n }\n\n private static contrastRatio(backgroundColor: Array<number>, textColor: Array<number>) {\n const lum1 = NeonColorUtils.relativeLuminance(backgroundColor);\n const lum2 = NeonColorUtils.relativeLuminance(textColor);\n\n const lightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n\n const contrast = (lightest + 0.05) / (darkest + 0.05);\n\n return Math.floor(contrast * 100) / 100;\n }\n\n private static labToXyz(t: number) {\n return t > NeonColorUtils.labT1 ? t * t * t : NeonColorUtils.labT2 * (t - NeonColorUtils.labT0);\n }\n\n private static xyzToRgb(r: number) {\n return r <= 0.00304 ? 255 * 12.92 * r : 255 * (1.055 * Math.pow(r, 1 / 2.4) - 0.055);\n }\n\n private static labToRgb(l: number, a: number, b: number): Array<number> {\n const y0 = (l + 16) / 116;\n const x0 = y0 + a / 500;\n const z0 = y0 - b / 200;\n\n const x1 = NeonColorUtils.labXn * NeonColorUtils.labToXyz(x0);\n const y1 = NeonColorUtils.labYn * NeonColorUtils.labToXyz(y0);\n const z1 = NeonColorUtils.labZn * NeonColorUtils.labToXyz(z0);\n const r = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(3.2404542 * x1 - 1.5371385 * y1 - 0.4985314 * z1))),\n ); // D65 -> sRGB\n const g = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(-0.969266 * x1 + 1.8760108 * y1 + 0.041556 * z1))),\n );\n const b_ = Math.round(\n Math.min(255, Math.max(0, NeonColorUtils.xyzToRgb(0.0556434 * x1 - 0.2040259 * y1 + 1.0572252 * z1))),\n );\n\n return [r, g, b_];\n }\n\n private static hclToLab(h: number, c: number, l: number) {\n const hue = h * NeonColorUtils.degreesToRadians;\n return [l, Math.cos(hue) * c, Math.sin(hue) * c];\n }\n\n private static hclToRgb(h: number, c: number, l: number): Array<number> {\n const [l_, a, b] = NeonColorUtils.hclToLab(h, c, l);\n return NeonColorUtils.labToRgb(l_, a, b);\n }\n\n private static lightReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness up if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance + 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n\n private static darkReferenceColor(backgroundRgb: Array<number>, textRgb: Array<number>) {\n let referenceRgb = backgroundRgb;\n const [hue, chroma, l] = NeonColorUtils.rgbToHcl(referenceRgb);\n let luminance = l;\n // check contrast and adjust lightness down if contrast ratio too low\n while (NeonColorUtils.contrastRatio(referenceRgb, textRgb) < 4.5) {\n luminance = luminance - 1;\n referenceRgb = NeonColorUtils.hclToRgb(hue, chroma, luminance);\n }\n\n return [hue, chroma, luminance];\n }\n}\n"],"names":["_NeonColorUtils","r","g","b","a","v","hexString","rgb","r1","g1","b1","x","y","z","l","lab","rgb1","rgb2","ratio","result","lum1","lum2","brightest","darkest","rHex","gHex","bHex","referenceColor","darkTextHex","lightTextHex","referenceRgb","darkTextRgb","lightTextRgb","hue","_rest","_l1Hue","l1Chroma","l1Luminance","_d1Hue","_d1Chroma","d1Luminance","chromaCurve","luminanceCurve","chroma","lStep","dStep","lightLuminance","darkLuminance","t","value","v1","h","channel","backgroundColor","textColor","lightest","contrast","y0","x0","z0","x1","y1","z1","b_","c","l_","backgroundRgb","textRgb","luminance","__publicField","NeonColorUtils"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NeonDateUtils.cjs.js","sources":["../../../src/common/utils/NeonDateUtils.ts"],"sourcesContent":["import type { NeonCalendarConfig } from '@/common/models/NeonCalendarConfig';\nimport type { NeonDate } from '@/common/models/NeonDate';\n\n/**\n * Date utilities for general application use as well as internally with the\n * <a href=\"/user-input/date-picker\">NeonDatePicker</a> component.\n */\nexport class NeonDateUtils {\n /**\n * Convert an ISO 8601 formatted string to a locale formatted date with a three letter month, a 2 digit day and a locale formatted time.\n *\n * @param date {string} The date/time as an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string.\n * @param locale {string} The locale for which to convert the date for display purposes, defaults to browser locale.\n * @param strict {boolean} Do not add time component to localise the date.\n *\n * @returns {NeonDate} Object representing the provided date.\n */\n public static stringToNeonDate(date: string, locale?: string, strict = false): NeonDate {\n const loc = locale || navigator.language;\n const now = new Date();\n const dateObj = new Date(!strict && date.length === 10 ? `${date}T${now.toISOString().split('T')[1]}` : date);\n let time;\n if (date.length > 10) {\n time = dateObj.toLocaleString(\n loc,\n date.length <= 16\n ? { hour12: false, hour: '2-digit', minute: '2-digit' }\n : { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' },\n );\n }\n\n const result: NeonDate = {\n year: +dateObj.toLocaleString('en-US', { year: 'numeric' }),\n yearFormatted: dateObj.toLocaleString(loc, { year: 'numeric' }),\n month: +dateObj.toLocaleString('en-US', { month: 'numeric' }),\n monthShortName: dateObj.toLocaleString(loc, { month: 'short' }),\n monthLongName: dateObj.toLocaleString(loc, { month: 'long' }),\n day: +dateObj.toLocaleString('en-US', { day: 'numeric' }),\n dayFormatted: dateObj.toLocaleString(loc, { day: '2-digit' }),\n };\n\n if (time) {\n result.time = time;\n }\n\n return result;\n }\n\n /**\n * Convert a date object to an ISO 8601 formatted string. By default, the time is not considered.\n *\n * @param date {Date} Javascript date object.\n * @param time {boolean} Whether to consider the time as part of the conversion to the ISO string.\n *\n * @returns {string} an ISO 8601 formatted date, optionally with the time as well.\n */\n public static dateToIso(date: Date, time = false): string {\n const dateString = date.toISOString();\n return time ? dateString : dateString.split('T')[0];\n }\n\n /**\n * Convert the params received into an ISO 8601 formatted string with only date in it.\n *\n * @param day {number} The number of the day to be used.\n * @param month {number} The number of the month to be used.\n * @param year {number} The number of the year to be used.\n *\n * @returns {string} an ISO 8601 formatted date for the given parameters.\n */\n public static dmyToIso(day: number, month: number, year: number): string {\n return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;\n }\n\n /**\n * Returns the days of the week starting at Monday day name translated using the locale received as a first element.\n *\n * @param locale {string} The locale for which to convert the date for display purposes, defaults to browser locale.\n *\n * @returns {Array<string>} an array with the days of the week named according to the locale received.\n */\n public static dowNames(locale?: string): Array<string> {\n const loc = locale || navigator.language;\n const date = new Date();\n\n const weekdays = [];\n while (!weekdays[date.getDay()]) {\n weekdays[date.getDay()] = date.toLocaleString(loc, { weekday: 'short' });\n date.setDate(date.getDate() + 1);\n }\n\n const sunday = weekdays.shift();\n if (sunday) {\n weekdays.push(sunday);\n }\n\n return weekdays;\n }\n\n /**\n * Returns the months of the year starting at January month name translated using the locale received as a first element.\n *\n * @param locale {string} The locale for which to convert the date for display purposes, defaults to browser locale.\n *\n * @returns {Array<string>} an array with the month names of the year, all named according to the locale received.\n */\n public static monthNames(locale?: string): Array<string> {\n const loc = locale || navigator.language;\n\n return Array.from(Array(12).keys()).map((key) => {\n const date = new Date(2023, key, 15);\n return date.toLocaleString(loc, { month: 'short' });\n });\n }\n\n /**\n * Collate & return the data required to drive the calendar popup in\n * <a href=\"/user-input/date-picker\">NeonDatePicker</a>.\n *\n * @param selectedDate {string} ISO-8601 date-only string for the selected date.\n * @param currentPageMonth {number} month of the current calendar page.\n * @param currentPageYear {number} year of the current calendar page.\n * @param currentPageDecadeStart {number} decade start year of the current calendar page.\n * @param locale {string} user's locale.\n *\n * @returns {NeonCalendarConfig} The calendar configuration.\n */\n public static toCalendarConfiguration(\n selectedDate?: string,\n currentPageMonth?: number,\n currentPageYear?: number,\n currentPageDecadeStart?: number,\n locale?: string,\n ): NeonCalendarConfig {\n const loc = locale || navigator.language;\n const today = NeonDateUtils.stringToNeonDate(NeonDateUtils.dateToIso(new Date()), loc);\n const selected = selectedDate ? NeonDateUtils.stringToNeonDate(selectedDate, loc, true) : undefined;\n // month indexed from 1-12\n const pageMonth = currentPageMonth || today.month;\n\n // month indexed from 0-11\n const pageDate = currentPageMonth && currentPageYear ? new Date(currentPageYear, currentPageMonth - 1, 15) : null;\n const pageMonthName = pageDate?.toLocaleString(loc, { month: 'long' }) || today.monthLongName;\n const pageYear = currentPageYear || today.year;\n const pageDecadeStart = currentPageDecadeStart || Math.floor(pageYear / 10) * 10;\n\n // determine dow of first day of month. Months are indexed from 0 here\n const date = new Date(pageYear, (pageMonth + 11) % 12, 1);\n const offsetDate = new Date(pageYear, (pageMonth + 11) % 12, 1);\n offsetDate.setDate(offsetDate.getDate() - 1);\n\n const dates: Array<Array<number | null>> = [];\n\n let lastDayOfMonth = 1;\n let done = false;\n\n for (let row = 0; row < 6; row++) {\n dates[row] = [];\n\n for (let col = 0; col < 7; col++) {\n if (row === 0 && col < offsetDate.getDay()) {\n dates[row][col] = null;\n } else {\n dates[row][col] = date.getDate();\n lastDayOfMonth = date.getDate();\n date.setDate(date.getDate() + 1);\n\n if (date.getDate() === 1) {\n for (let i = col + 1; i < 7; i++) {\n dates[row][i] = null;\n }\n done = true;\n break;\n }\n }\n }\n\n if (done) {\n break;\n }\n }\n\n return {\n today,\n selected,\n pageMonth,\n pageMonthName,\n pageYear,\n pageDecadeStart,\n dowNames: NeonDateUtils.dowNames(loc),\n dates,\n lastDayOfMonth,\n months: NeonDateUtils.monthNames(loc),\n };\n }\n}\n"],"names":["NeonDateUtils","date","locale","strict","loc","now","dateObj","time","result","dateString","day","month","year","weekdays","sunday","key","selectedDate","currentPageMonth","currentPageYear","currentPageDecadeStart","today","selected","pageMonth","pageDate","pageMonthName","pageYear","pageDecadeStart","offsetDate","dates","lastDayOfMonth","done","row","col","i"],"mappings":"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"}
1
+ {"version":3,"file":"NeonDateUtils.cjs.js","sources":["../../../src/common/utils/NeonDateUtils.ts"],"sourcesContent":["import type { NeonCalendarConfig } from '@/common/models/NeonCalendarConfig';\nimport type { NeonDate } from '@/common/models/NeonDate';\n\n/**\n * Date utilities for general application use as well as internally with the\n * <a href=\"/user-input/date-picker\">NeonDatePicker</a> component.\n */\nexport class NeonDateUtils {\n /**\n * Convert an ISO 8601 formatted string to a locale formatted date with a three letter month, a 2 digit day and a locale formatted time.\n *\n * @param date The date/time as an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> string.\n * @param locale The locale for which to convert the date for display purposes, defaults to browser locale.\n * @param strict Do not add time component to localise the date.\n *\n * @returns Object representing the provided date.\n */\n public static stringToNeonDate(date: string, locale?: string, strict = false): NeonDate {\n const loc = locale || navigator.language;\n const now = new Date();\n const dateObj = new Date(!strict && date.length === 10 ? `${date}T${now.toISOString().split('T')[1]}` : date);\n let time;\n if (date.length > 10) {\n time = dateObj.toLocaleString(\n loc,\n date.length <= 16\n ? { hour12: false, hour: '2-digit', minute: '2-digit' }\n : { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' },\n );\n }\n\n const result: NeonDate = {\n year: +dateObj.toLocaleString('en-US', { year: 'numeric' }),\n yearFormatted: dateObj.toLocaleString(loc, { year: 'numeric' }),\n month: +dateObj.toLocaleString('en-US', { month: 'numeric' }),\n monthShortName: dateObj.toLocaleString(loc, { month: 'short' }),\n monthLongName: dateObj.toLocaleString(loc, { month: 'long' }),\n day: +dateObj.toLocaleString('en-US', { day: 'numeric' }),\n dayFormatted: dateObj.toLocaleString(loc, { day: '2-digit' }),\n };\n\n if (time) {\n result.time = time;\n }\n\n return result;\n }\n\n /**\n * Convert a date object to an ISO 8601 formatted string. By default, the time is not considered.\n *\n * @param date Javascript date object.\n * @param time Whether to consider the time as part of the conversion to the ISO string.\n *\n * @returns an ISO 8601 formatted date, optionally with the time as well.\n */\n public static dateToIso(date: Date, time = false): string {\n const dateString = date.toISOString();\n return time ? dateString : dateString.split('T')[0];\n }\n\n /**\n * Convert the params received into an ISO 8601 formatted string with only date in it.\n *\n * @param day The number of the day to be used.\n * @param month The number of the month to be used.\n * @param year The number of the year to be used.\n *\n * @returns an ISO 8601 formatted date for the given parameters.\n */\n public static dmyToIso(day: number, month: number, year: number): string {\n return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;\n }\n\n /**\n * Returns the days of the week starting at Monday day name translated using the locale received as a first element.\n *\n * @param locale The locale for which to convert the date for display purposes, defaults to browser locale.\n *\n * @returns an array with the days of the week named according to the locale received.\n */\n public static dowNames(locale?: string): Array<string> {\n const loc = locale || navigator.language;\n const date = new Date();\n\n const weekdays = [];\n while (!weekdays[date.getDay()]) {\n weekdays[date.getDay()] = date.toLocaleString(loc, { weekday: 'short' });\n date.setDate(date.getDate() + 1);\n }\n\n const sunday = weekdays.shift();\n if (sunday) {\n weekdays.push(sunday);\n }\n\n return weekdays;\n }\n\n /**\n * Returns the months of the year starting at January month name translated using the locale received as a first element.\n *\n * @param locale The locale for which to convert the date for display purposes, defaults to browser locale.\n *\n * @returns an array with the month names of the year, all named according to the locale received.\n */\n public static monthNames(locale?: string): Array<string> {\n const loc = locale || navigator.language;\n\n return Array.from(Array(12).keys()).map((key) => {\n const date = new Date(2023, key, 15);\n return date.toLocaleString(loc, { month: 'short' });\n });\n }\n\n /**\n * Collate & return the data required to drive the calendar popup in\n * <a href=\"/user-input/date-picker\">NeonDatePicker</a>.\n *\n * @param selectedDate ISO-8601 date-only string for the selected date.\n * @param currentPageMonth month of the current calendar page.\n * @param currentPageYear year of the current calendar page.\n * @param currentPageDecadeStart decade start year of the current calendar page.\n * @param locale user's locale.\n *\n * @returns The calendar configuration.\n */\n public static toCalendarConfiguration(\n selectedDate?: string,\n currentPageMonth?: number,\n currentPageYear?: number,\n currentPageDecadeStart?: number,\n locale?: string,\n ): NeonCalendarConfig {\n const loc = locale || navigator.language;\n const today = NeonDateUtils.stringToNeonDate(NeonDateUtils.dateToIso(new Date()), loc);\n const selected = selectedDate ? NeonDateUtils.stringToNeonDate(selectedDate, loc, true) : undefined;\n // month indexed from 1-12\n const pageMonth = currentPageMonth || today.month;\n\n // month indexed from 0-11\n const pageDate = currentPageMonth && currentPageYear ? new Date(currentPageYear, currentPageMonth - 1, 15) : null;\n const pageMonthName = pageDate?.toLocaleString(loc, { month: 'long' }) || today.monthLongName;\n const pageYear = currentPageYear || today.year;\n const pageDecadeStart = currentPageDecadeStart || Math.floor(pageYear / 10) * 10;\n\n // determine dow of first day of month. Months are indexed from 0 here\n const date = new Date(pageYear, (pageMonth + 11) % 12, 1);\n const offsetDate = new Date(pageYear, (pageMonth + 11) % 12, 1);\n offsetDate.setDate(offsetDate.getDate() - 1);\n\n const dates: Array<Array<number | null>> = [];\n\n let lastDayOfMonth = 1;\n let done = false;\n\n for (let row = 0; row < 6; row++) {\n dates[row] = [];\n\n for (let col = 0; col < 7; col++) {\n if (row === 0 && col < offsetDate.getDay()) {\n dates[row][col] = null;\n } else {\n dates[row][col] = date.getDate();\n lastDayOfMonth = date.getDate();\n date.setDate(date.getDate() + 1);\n\n if (date.getDate() === 1) {\n for (let i = col + 1; i < 7; i++) {\n dates[row][i] = null;\n }\n done = true;\n break;\n }\n }\n }\n\n if (done) {\n break;\n }\n }\n\n return {\n today,\n selected,\n pageMonth,\n pageMonthName,\n pageYear,\n pageDecadeStart,\n dowNames: NeonDateUtils.dowNames(loc),\n dates,\n lastDayOfMonth,\n months: NeonDateUtils.monthNames(loc),\n };\n }\n}\n"],"names":["NeonDateUtils","date","locale","strict","loc","now","dateObj","time","result","dateString","day","month","year","weekdays","sunday","key","selectedDate","currentPageMonth","currentPageYear","currentPageDecadeStart","today","selected","pageMonth","pageDate","pageMonthName","pageYear","pageDecadeStart","offsetDate","dates","lastDayOfMonth","done","row","col","i"],"mappings":"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"}