@servicetitan/marketing-ui 5.9.0 → 5.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/components/ads/ads-stat.js +21 -10
  2. package/dist/components/ads/ads-stat.js.map +1 -1
  3. package/dist/components/charts/funnel-chart/components/funnel-chart.js +118 -6
  4. package/dist/components/charts/funnel-chart/components/funnel-chart.js.map +1 -1
  5. package/dist/components/charts/funnel-chart/components/funnel-chart.module.less.d.ts +9 -0
  6. package/dist/components/charts/funnel-chart/components/funnel-svg.js +62 -12
  7. package/dist/components/charts/funnel-chart/components/funnel-svg.js.map +1 -1
  8. package/dist/components/charts/funnel-chart/index.js +1 -0
  9. package/dist/components/charts/funnel-chart/index.js.map +1 -1
  10. package/dist/components/charts/funnel-chart/utils/const.js +1 -0
  11. package/dist/components/charts/funnel-chart/utils/const.js.map +1 -1
  12. package/dist/components/charts/funnel-chart/utils/interface.js +2 -1
  13. package/dist/components/charts/funnel-chart/utils/interface.js.map +1 -1
  14. package/dist/components/charts/line-chart/components/body.js +105 -16
  15. package/dist/components/charts/line-chart/components/body.js.map +1 -1
  16. package/dist/components/charts/line-chart/components/body.module.less.d.ts +4 -0
  17. package/dist/components/charts/line-chart/components/container.js +12 -4
  18. package/dist/components/charts/line-chart/components/container.js.map +1 -1
  19. package/dist/components/charts/line-chart/components/hover-popover.js +56 -13
  20. package/dist/components/charts/line-chart/components/hover-popover.js.map +1 -1
  21. package/dist/components/charts/line-chart/components/hover-popover.module.less.d.ts +5 -0
  22. package/dist/components/charts/line-chart/components/sidebar.js +35 -5
  23. package/dist/components/charts/line-chart/components/sidebar.js.map +1 -1
  24. package/dist/components/charts/line-chart/components/sidebar.module.less.d.ts +13 -0
  25. package/dist/components/charts/line-chart/components/stuff.js +73 -32
  26. package/dist/components/charts/line-chart/components/stuff.js.map +1 -1
  27. package/dist/components/charts/line-chart/components/stuff.module.less.d.ts +6 -0
  28. package/dist/components/charts/line-chart/components/svg-bars.js +58 -26
  29. package/dist/components/charts/line-chart/components/svg-bars.js.map +1 -1
  30. package/dist/components/charts/line-chart/components/svg-body.js +52 -11
  31. package/dist/components/charts/line-chart/components/svg-body.js.map +1 -1
  32. package/dist/components/charts/line-chart/components/svg-lines.js +46 -27
  33. package/dist/components/charts/line-chart/components/svg-lines.js.map +1 -1
  34. package/dist/components/charts/line-chart/components/svg.module.less.d.ts +5 -0
  35. package/dist/components/charts/line-chart/index.js +1 -0
  36. package/dist/components/charts/line-chart/index.js.map +1 -1
  37. package/dist/components/charts/line-chart/stores/line-chart.store.js +98 -137
  38. package/dist/components/charts/line-chart/stores/line-chart.store.js.map +1 -1
  39. package/dist/components/charts/line-chart/stores/svg.store.js +66 -108
  40. package/dist/components/charts/line-chart/stores/svg.store.js.map +1 -1
  41. package/dist/components/charts/line-chart/utils/const.js +8 -7
  42. package/dist/components/charts/line-chart/utils/const.js.map +1 -1
  43. package/dist/components/charts/line-chart/utils/formatters.js +13 -11
  44. package/dist/components/charts/line-chart/utils/formatters.js.map +1 -1
  45. package/dist/components/charts/line-chart/utils/interfaces.js +2 -1
  46. package/dist/components/charts/line-chart/utils/interfaces.js.map +1 -1
  47. package/dist/components/charts/line-chart/utils/internal-interfaces.js +2 -1
  48. package/dist/components/charts/line-chart/utils/internal-interfaces.js.map +1 -1
  49. package/dist/components/charts/line-chart/utils/key.js +2 -1
  50. package/dist/components/charts/line-chart/utils/key.js.map +1 -1
  51. package/dist/components/charts/line-chart/utils/labels.js +50 -46
  52. package/dist/components/charts/line-chart/utils/labels.js.map +1 -1
  53. package/dist/components/charts/pie-chart/components/pie-chart.js +60 -6
  54. package/dist/components/charts/pie-chart/components/pie-chart.js.map +1 -1
  55. package/dist/components/charts/pie-chart/components/pie-chart.module.less.d.ts +3 -0
  56. package/dist/components/charts/pie-chart/components/pie.js +176 -39
  57. package/dist/components/charts/pie-chart/components/pie.js.map +1 -1
  58. package/dist/components/charts/pie-chart/index.js +2 -0
  59. package/dist/components/charts/pie-chart/index.js.map +1 -1
  60. package/dist/components/charts/pie-chart/utils/const.js +55 -39
  61. package/dist/components/charts/pie-chart/utils/const.js.map +1 -1
  62. package/dist/components/charts/pie-chart/utils/interface.js +2 -1
  63. package/dist/components/charts/pie-chart/utils/interface.js.map +1 -1
  64. package/dist/components/image-cropper/image-cropper.js +74 -88
  65. package/dist/components/image-cropper/image-cropper.js.map +1 -1
  66. package/dist/components/stat/stat-card.js +68 -22
  67. package/dist/components/stat/stat-card.js.map +1 -1
  68. package/dist/components/stat/stat-card.module.less.d.ts +5 -0
  69. package/dist/components/stat/stat-extended-card.js +76 -4
  70. package/dist/components/stat/stat-extended-card.js.map +1 -1
  71. package/dist/components/ui/action-button/action-button.js +33 -7
  72. package/dist/components/ui/action-button/action-button.js.map +1 -1
  73. package/dist/components/ui/action-button/action-button.module.less.d.ts +9 -0
  74. package/dist/components/ui/action-button/index.js +1 -0
  75. package/dist/components/ui/action-button/index.js.map +1 -1
  76. package/dist/components/ui/centered-spinner/centered-spinner.js +20 -2
  77. package/dist/components/ui/centered-spinner/centered-spinner.js.map +1 -1
  78. package/dist/components/ui/date-range-picker/date-range-picker.js +71 -35
  79. package/dist/components/ui/date-range-picker/date-range-picker.js.map +1 -1
  80. package/dist/components/ui/date-range-picker/date-range-picker.module.less.d.ts +4 -0
  81. package/dist/components/ui/disabled-button.js +12 -3
  82. package/dist/components/ui/disabled-button.js.map +1 -1
  83. package/dist/components/ui/label-with-hint/label-with-hint.js +23 -1
  84. package/dist/components/ui/label-with-hint/label-with-hint.js.map +1 -1
  85. package/dist/components/ui/line-text/index.js +1 -0
  86. package/dist/components/ui/line-text/index.js.map +1 -1
  87. package/dist/components/ui/line-text/line-text.js +71 -12
  88. package/dist/components/ui/line-text/line-text.js.map +1 -1
  89. package/dist/components/ui/line-text/line-text.module.less.d.ts +6 -0
  90. package/dist/components/ui/title-popover/index.js +1 -0
  91. package/dist/components/ui/title-popover/index.js.map +1 -1
  92. package/dist/components/ui/title-popover/title-popover.js +78 -69
  93. package/dist/components/ui/title-popover/title-popover.js.map +1 -1
  94. package/dist/components/ui/title-popover/title-popover.module.less.d.ts +3 -0
  95. package/dist/index.js +3 -1
  96. package/dist/index.js.map +1 -1
  97. package/dist/utils/ads-texts.js +2 -1
  98. package/dist/utils/ads-texts.js.map +1 -1
  99. package/dist/utils/date/date-range-picker-options.js +90 -68
  100. package/dist/utils/date/date-range-picker-options.js.map +1 -1
  101. package/dist/utils/date/date-range-picker-state.js +42 -43
  102. package/dist/utils/date/date-range-picker-state.js.map +1 -1
  103. package/dist/utils/date/date-tenant.js +4 -6
  104. package/dist/utils/date/date-tenant.js.map +1 -1
  105. package/dist/utils/date/date.js +5 -9
  106. package/dist/utils/date/date.js.map +1 -1
  107. package/dist/utils/date/index.js +1 -0
  108. package/dist/utils/date/index.js.map +1 -1
  109. package/dist/utils/format-big-numbers.js +11 -6
  110. package/dist/utils/format-big-numbers.js.map +1 -1
  111. package/dist/utils/formatters.js +8 -7
  112. package/dist/utils/formatters.js.map +1 -1
  113. package/dist/utils/helpers.js +9 -12
  114. package/dist/utils/helpers.js.map +1 -1
  115. package/dist/utils/marketing-parner-handlers.js +9 -12
  116. package/dist/utils/marketing-parner-handlers.js.map +1 -1
  117. package/dist/utils/string-case.js +1 -0
  118. package/dist/utils/string-case.js.map +1 -1
  119. package/dist/utils/use-client-rect.js +19 -19
  120. package/dist/utils/use-client-rect.js.map +1 -1
  121. package/dist/utils/use-target-range-store.js +7 -6
  122. package/dist/utils/use-target-range-store.js.map +1 -1
  123. package/package.json +11 -11
  124. package/dist/components/charts/funnel-chart/funnel-chart.stories.js +0 -76
  125. package/dist/components/charts/funnel-chart/funnel-chart.stories.js.map +0 -1
  126. package/dist/components/charts/line-chart/line-chart.stories.js +0 -225
  127. package/dist/components/charts/line-chart/line-chart.stories.js.map +0 -1
  128. package/dist/components/charts/pie-chart/pie-chart.stories.js +0 -22
  129. package/dist/components/charts/pie-chart/pie-chart.stories.js.map +0 -1
  130. package/dist/components/image-cropper/image-cropper.stories.js +0 -39
  131. package/dist/components/image-cropper/image-cropper.stories.js.map +0 -1
  132. package/dist/components/stat/stat-cards.stories.js +0 -16
  133. package/dist/components/stat/stat-cards.stories.js.map +0 -1
  134. package/dist/components/stat/stat-extended-card.stories.js +0 -12
  135. package/dist/components/stat/stat-extended-card.stories.js.map +0 -1
  136. package/dist/components/ui/action-button/action-button.stories.js +0 -11
  137. package/dist/components/ui/action-button/action-button.stories.js.map +0 -1
  138. package/dist/components/ui/centered-spinner/centered-spinner.stories.js +0 -12
  139. package/dist/components/ui/centered-spinner/centered-spinner.stories.js.map +0 -1
  140. package/dist/components/ui/date-range-picker/date-range-picker.stories.js +0 -18
  141. package/dist/components/ui/date-range-picker/date-range-picker.stories.js.map +0 -1
  142. package/dist/components/ui/label-with-hint/label-with-hint.stories.js +0 -12
  143. package/dist/components/ui/label-with-hint/label-with-hint.stories.js.map +0 -1
  144. package/dist/components/ui/line-text/line-text-body.stories.js +0 -11
  145. package/dist/components/ui/line-text/line-text-body.stories.js.map +0 -1
  146. package/dist/components/ui/line-text/line-text-head.stories.js +0 -11
  147. package/dist/components/ui/line-text/line-text-head.stories.js.map +0 -1
  148. package/dist/components/ui/title-popover/title-popover.stories.js +0 -17
  149. package/dist/components/ui/title-popover/title-popover.stories.js.map +0 -1
  150. package/dist/utils/__tests__/format-big-numbers.test.js +0 -16
  151. package/dist/utils/__tests__/format-big-numbers.test.js.map +0 -1
  152. package/dist/utils/__tests__/formatters.test.js +0 -45
  153. package/dist/utils/__tests__/formatters.test.js.map +0 -1
  154. package/dist/utils/__tests__/helpers.test.js +0 -31
  155. package/dist/utils/__tests__/helpers.test.js.map +0 -1
  156. package/dist/utils/__tests__/string-case.test.js +0 -20
  157. package/dist/utils/__tests__/string-case.test.js.map +0 -1
  158. package/dist/utils/date/__mocks__/date-mock.js +0 -19
  159. package/dist/utils/date/__mocks__/date-mock.js.map +0 -1
  160. package/dist/utils/date/__tests__/date-range-picker.test.js +0 -93
  161. package/dist/utils/date/__tests__/date-range-picker.test.js.map +0 -1
  162. package/dist/utils/date/__tests__/date-tenant.test.js +0 -29
  163. package/dist/utils/date/__tests__/date-tenant.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-picker-state.js","sourceRoot":"","sources":["../../../src/utils/date/date-range-picker-state.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAiBpE,MAAM,OAAO,oBAAoB;IAK7B,IAAc,cAAc;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY,MAAmC,EAAE,OAA4C;;QAZjF;;;;;WAAkB;QAErB;;;;;WAA6C;QAoC9C;;;;mBAAW,CAAC,GAAe,EAAE,EAAE;gBACnC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;YACrB,CAAC;WAAC;QA3BE,cAAc,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QACrC,CAAC;aAAM,IAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,0CAAE,KAAK,CAAC;QAC5E,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAmC;QAC7C,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,iBAAiB,CACpB,OAA2C,EAC3C,MAAmC;QAEnC,OAAO,IAAI,oBAAoB,CAC3B,MAAM,EACN,OAAO,CACqC,CAAC;IACrD,CAAC;CAKJ;AAzCe;IAAX,UAAU;;mDAAmB;AAI9B;IAAC,QAAQ;;;0DAMR;AA4BO;IAAP,MAAM;;sDAEL"}
1
+ {"version":3,"sources":["../../../src/utils/date/date-range-picker-state.ts"],"sourcesContent":["import { DateRangePickerOption, DateRangePickerOptions } from './date-range-picker-options';\nimport { DateRange } from './date';\nimport { action, computed, makeObservable, observable } from 'mobx';\n\ninterface DateRangePickerStateConfig {\n defaultValue?: DateRange;\n}\n\nexport interface DateRangePickerStateType {\n value?: DateRange;\n onChange(val?: DateRange): void;\n}\n\nexport interface DateRangePickerOptionsStateType<OptionKeys extends string>\n extends DateRangePickerStateType {\n readonly options: DateRangePickerOptions<OptionKeys>;\n readonly selectedOption?: DateRangePickerOption<OptionKeys>;\n}\n\nexport class DateRangePickerState<OptionKeys extends string = never> {\n @observable value?: DateRange;\n\n readonly options?: DateRangePickerOptions<OptionKeys>;\n\n @computed get selectedOption(): DateRangePickerOption<OptionKeys> | undefined {\n if (!this.value || !this.options) {\n return undefined;\n }\n\n return this.options.findOption(this.value);\n }\n\n constructor(config?: DateRangePickerStateConfig, options?: DateRangePickerOptions<OptionKeys>) {\n makeObservable(this);\n\n this.options = options;\n\n if (config?.defaultValue) {\n this.value = config.defaultValue;\n } else if (this.options?.defaultOption) {\n this.value = this.options.findOption(this.options.defaultOption)?.value;\n }\n }\n\n static create(config?: DateRangePickerStateConfig): DateRangePickerStateType {\n return new DateRangePickerState(config);\n }\n\n static createWithOptions<OptionKeys extends string>(\n options: DateRangePickerOptions<OptionKeys>,\n config?: DateRangePickerStateConfig\n ): DateRangePickerOptionsStateType<OptionKeys> {\n return new DateRangePickerState(\n config,\n options\n ) as DateRangePickerOptionsStateType<OptionKeys>;\n }\n\n @action onChange = (val?: DateRange) => {\n this.value = val;\n };\n}\n"],"names":["DateRange","action","computed","makeObservable","observable","DateRangePickerState","selectedOption","value","options","undefined","findOption","create","config","createWithOptions","constructor","onChange","val","defaultValue","defaultOption"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,SAASA,SAAS,QAAQ,SAAS;AACnC,SAASC,MAAM,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,UAAU,QAAQ,OAAO;AAiBpE,OAAO,MAAMC;IAKT,IAAcC,iBAAgE;QAC1E,IAAI,CAAC,IAAI,CAACC,KAAK,IAAI,CAAC,IAAI,CAACC,OAAO,EAAE;YAC9B,OAAOC;QACX;QAEA,OAAO,IAAI,CAACD,OAAO,CAACE,UAAU,CAAC,IAAI,CAACH,KAAK;IAC7C;IAcA,OAAOI,OAAOC,MAAmC,EAA4B;QACzE,OAAO,IAAIP,qBAAqBO;IACpC;IAEA,OAAOC,kBACHL,OAA2C,EAC3CI,MAAmC,EACQ;QAC3C,OAAO,IAAIP,qBACPO,QACAJ;IAER;IAxBAM,YAAYF,MAAmC,EAAEJ,OAA4C,CAAE;YAOhF;QAnBf,uBAAYD,SAAZ,KAAA;QAEA,uBAASC,WAAT,KAAA;QAoCA,uBAAQO,YAAW,CAACC;YAChB,IAAI,CAACT,KAAK,GAAGS;QACjB;QA3BIb,eAAe,IAAI;QAEnB,IAAI,CAACK,OAAO,GAAGA;QAEf,IAAII,mBAAAA,6BAAAA,OAAQK,YAAY,EAAE;YACtB,IAAI,CAACV,KAAK,GAAGK,OAAOK,YAAY;QACpC,OAAO,KAAI,gBAAA,IAAI,CAACT,OAAO,cAAZ,oCAAA,cAAcU,aAAa,EAAE;gBACvB;YAAb,IAAI,CAACX,KAAK,IAAG,2BAAA,IAAI,CAACC,OAAO,CAACE,UAAU,CAAC,IAAI,CAACF,OAAO,CAACU,aAAa,eAAlD,+CAAA,yBAAqDX,KAAK;QAC3E;IACJ;AAmBJ"}
@@ -20,15 +20,13 @@
20
20
  * it's an UI date, we only care about its local time, thus we need to construct a moment which represents the same local time but in tenant TZ (see momentFromUI)
21
21
  *
22
22
  * If at any point we're able to get rid of all the components relying on Date, this class won't be needed anymore.
23
- */
24
- export class TenantDate {
23
+ */ export class TenantDate {
25
24
  /**
26
25
  * represent local time in tenant's Timezone
27
26
  * @note returned date still have local timezone, so it shouldn't be converted to UTC anywhere
28
27
  * @param tenantUtcOffset tenant's timezone offset to UTC (in minutes)
29
28
  * @param localDateTime datetime or undefined (for 'now')
30
- */
31
- static tenantTimeFromLocal(tenantUtcOffset, localDateTime) {
29
+ */ static tenantTimeFromLocal(tenantUtcOffset, localDateTime) {
32
30
  const dtLocal = localDateTime !== null && localDateTime !== void 0 ? localDateTime : new Date();
33
31
  const dtUtc = new Date(dtLocal.getTime() + dtLocal.getTimezoneOffset() * 60000);
34
32
  return new Date(dtUtc.getTime() + tenantUtcOffset * 60000);
@@ -38,10 +36,10 @@ export class TenantDate {
38
36
  * @note returned date still have local timezone, so it shouldn't be converted to UTC anywhere
39
37
  * @param tenantUtcOffset tenant's timezone offset to UTC (in minutes)
40
38
  * @param localDateTime datetime or undefined (for 'now')
41
- */
42
- static tenantDateFromLocal(tenantUtcOffset, localDateTime) {
39
+ */ static tenantDateFromLocal(tenantUtcOffset, localDateTime) {
43
40
  const dt = TenantDate.tenantTimeFromLocal(tenantUtcOffset, localDateTime);
44
41
  return new Date(dt.getFullYear(), dt.getMonth(), dt.getDate());
45
42
  }
46
43
  }
44
+
47
45
  //# sourceMappingURL=date-tenant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-tenant.js","sourceRoot":"","sources":["../../../src/utils/date/date-tenant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,UAAU;IACnB;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,eAAuB,EAAE,aAAoB;QACpE,MAAM,OAAO,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;QAEhF,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,eAAe,GAAG,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,eAAuB,EAAE,aAAoB;QACpE,MAAM,EAAE,GAAG,UAAU,CAAC,mBAAmB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAE1E,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;CACJ"}
1
+ {"version":3,"sources":["../../../src/utils/date/date-tenant.ts"],"sourcesContent":["/*\n * This class exists because we:\n *\n * (1) want to always use tenant TZ (as specified in the settings) over the browser TZ to display/parse dates\n * (2) have parts which we can't/don't want to change right now which use Date (instead of Moment)\n *\n * The issue with Date is that it doesn't support timezones. So we have to introduce the idea of UI Date --\n * a Date value with ticks set to such value that the local time in the current browser TZ is equal to local time in tenant TZ represented by passed real Date\n *\n * Example:\n *\n * Tenant TZ is PDT UTC-07\n * Browser TZ is EDT UTC-04\n *\n * In DB we have a LaunchDate which is 2020-05-11 04:00:00 (we use UTC in DB)\n * This time gives local time of 2020-05-11 00:00:00 in tenant TZ\n * To display the same time in browser's TZ, we need to create a Date with UTC value of 2020-05-11 07:00:00 (see createUIDate)\n * Note that the UTC value of this Date is useless, we only care about local time it gives in that particular TZ, that's why it's an UI date\n * The same reasoning applies when we get a Date from a DatePicker, for example --\n * it's an UI date, we only care about its local time, thus we need to construct a moment which represents the same local time but in tenant TZ (see momentFromUI)\n *\n * If at any point we're able to get rid of all the components relying on Date, this class won't be needed anymore.\n */\nexport class TenantDate {\n /**\n * represent local time in tenant's Timezone\n * @note returned date still have local timezone, so it shouldn't be converted to UTC anywhere\n * @param tenantUtcOffset tenant's timezone offset to UTC (in minutes)\n * @param localDateTime datetime or undefined (for 'now')\n */\n static tenantTimeFromLocal(tenantUtcOffset: number, localDateTime?: Date): Date {\n const dtLocal = localDateTime ?? new Date();\n const dtUtc = new Date(dtLocal.getTime() + dtLocal.getTimezoneOffset() * 60000);\n\n return new Date(dtUtc.getTime() + tenantUtcOffset * 60000);\n }\n\n /**\n * represent local date in tenant's Timezone (time values will be 0)\n * @note returned date still have local timezone, so it shouldn't be converted to UTC anywhere\n * @param tenantUtcOffset tenant's timezone offset to UTC (in minutes)\n * @param localDateTime datetime or undefined (for 'now')\n */\n static tenantDateFromLocal(tenantUtcOffset: number, localDateTime?: Date): Date {\n const dt = TenantDate.tenantTimeFromLocal(tenantUtcOffset, localDateTime);\n\n return new Date(dt.getFullYear(), dt.getMonth(), dt.getDate());\n }\n}\n"],"names":["TenantDate","tenantTimeFromLocal","tenantUtcOffset","localDateTime","dtLocal","Date","dtUtc","getTime","getTimezoneOffset","tenantDateFromLocal","dt","getFullYear","getMonth","getDate"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;CAsBC,GACD,OAAO,MAAMA;IACT;;;;;KAKC,GACD,OAAOC,oBAAoBC,eAAuB,EAAEC,aAAoB,EAAQ;QAC5E,MAAMC,UAAUD,0BAAAA,2BAAAA,gBAAiB,IAAIE;QACrC,MAAMC,QAAQ,IAAID,KAAKD,QAAQG,OAAO,KAAKH,QAAQI,iBAAiB,KAAK;QAEzE,OAAO,IAAIH,KAAKC,MAAMC,OAAO,KAAKL,kBAAkB;IACxD;IAEA;;;;;KAKC,GACD,OAAOO,oBAAoBP,eAAuB,EAAEC,aAAoB,EAAQ;QAC5E,MAAMO,KAAKV,WAAWC,mBAAmB,CAACC,iBAAiBC;QAE3D,OAAO,IAAIE,KAAKK,GAAGC,WAAW,IAAID,GAAGE,QAAQ,IAAIF,GAAGG,OAAO;IAC/D;AACJ"}
@@ -1,16 +1,12 @@
1
- export const datesEqual = (date1, date2) => date1.getFullYear() === date2.getFullYear() &&
2
- date1.getMonth() === date2.getMonth() &&
3
- date1.getDate() === date2.getDate() &&
4
- date1.getHours() === date2.getHours() &&
5
- date1.getMinutes() === date2.getMinutes() &&
6
- date1.getSeconds() === date2.getSeconds();
7
- export const dateRangesEqual = (dateRange1, dateRange2) => datesEqual(dateRange1.start, dateRange2.start) && datesEqual(dateRange1.end, dateRange2.end);
8
- export const getComparisonDateRange = (range) => {
1
+ export const datesEqual = (date1, date2)=>date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate() && date1.getHours() === date2.getHours() && date1.getMinutes() === date2.getMinutes() && date1.getSeconds() === date2.getSeconds();
2
+ export const dateRangesEqual = (dateRange1, dateRange2)=>datesEqual(dateRange1.start, dateRange2.start) && datesEqual(dateRange1.end, dateRange2.end);
3
+ export const getComparisonDateRange = (range)=>{
9
4
  const diff = range.end.getTime() - range.start.getTime();
10
5
  const compareStart = new Date(range.start.getTime() - diff);
11
6
  return {
12
7
  start: new Date(compareStart.getFullYear(), compareStart.getMonth(), compareStart.getDate()),
13
- end: range.start,
8
+ end: range.start
14
9
  };
15
10
  };
11
+
16
12
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/utils/date/date.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAW,EAAE,KAAW,EAAE,EAAE,CACnD,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;IAC3C,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;IACrC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;IACnC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;IACrC,KAAK,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE;IACzC,KAAK,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAqB,EAAE,UAAqB,EAAE,EAAE,CAC5E,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAgB,EAAE,EAAE;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAE5D,OAAO;QACH,KAAK,EAAE,IAAI,IAAI,CACX,YAAY,CAAC,WAAW,EAAE,EAC1B,YAAY,CAAC,QAAQ,EAAE,EACvB,YAAY,CAAC,OAAO,EAAE,CACzB;QACD,GAAG,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/utils/date/date.ts"],"sourcesContent":["export interface DateRange {\n start: Date;\n end: Date;\n}\n\nexport const datesEqual = (date1: Date, date2: Date) =>\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate() &&\n date1.getHours() === date2.getHours() &&\n date1.getMinutes() === date2.getMinutes() &&\n date1.getSeconds() === date2.getSeconds();\n\nexport const dateRangesEqual = (dateRange1: DateRange, dateRange2: DateRange) =>\n datesEqual(dateRange1.start, dateRange2.start) && datesEqual(dateRange1.end, dateRange2.end);\n\nexport const getComparisonDateRange = (range: DateRange) => {\n const diff = range.end.getTime() - range.start.getTime();\n const compareStart = new Date(range.start.getTime() - diff);\n\n return {\n start: new Date(\n compareStart.getFullYear(),\n compareStart.getMonth(),\n compareStart.getDate()\n ),\n end: range.start,\n };\n};\n"],"names":["datesEqual","date1","date2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","dateRangesEqual","dateRange1","dateRange2","start","end","getComparisonDateRange","range","diff","getTime","compareStart","Date"],"mappings":"AAKA,OAAO,MAAMA,aAAa,CAACC,OAAaC,QACpCD,MAAME,WAAW,OAAOD,MAAMC,WAAW,MACzCF,MAAMG,QAAQ,OAAOF,MAAME,QAAQ,MACnCH,MAAMI,OAAO,OAAOH,MAAMG,OAAO,MACjCJ,MAAMK,QAAQ,OAAOJ,MAAMI,QAAQ,MACnCL,MAAMM,UAAU,OAAOL,MAAMK,UAAU,MACvCN,MAAMO,UAAU,OAAON,MAAMM,UAAU,GAAG;AAE9C,OAAO,MAAMC,kBAAkB,CAACC,YAAuBC,aACnDX,WAAWU,WAAWE,KAAK,EAAED,WAAWC,KAAK,KAAKZ,WAAWU,WAAWG,GAAG,EAAEF,WAAWE,GAAG,EAAE;AAEjG,OAAO,MAAMC,yBAAyB,CAACC;IACnC,MAAMC,OAAOD,MAAMF,GAAG,CAACI,OAAO,KAAKF,MAAMH,KAAK,CAACK,OAAO;IACtD,MAAMC,eAAe,IAAIC,KAAKJ,MAAMH,KAAK,CAACK,OAAO,KAAKD;IAEtD,OAAO;QACHJ,OAAO,IAAIO,KACPD,aAAaf,WAAW,IACxBe,aAAad,QAAQ,IACrBc,aAAab,OAAO;QAExBQ,KAAKE,MAAMH,KAAK;IACpB;AACJ,EAAE"}
@@ -2,4 +2,5 @@ export * from './date';
2
2
  export * from './date-tenant';
3
3
  export * from './date-range-picker-options';
4
4
  export * from './date-range-picker-state';
5
+
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/date/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"sources":["../../../src/utils/date/index.ts"],"sourcesContent":["export * from './date';\nexport * from './date-tenant';\nexport * from './date-range-picker-options';\nexport * from './date-range-picker-state';\n"],"names":[],"mappings":"AAAA,cAAc,SAAS;AACvB,cAAc,gBAAgB;AAC9B,cAAc,8BAA8B;AAC5C,cAAc,4BAA4B"}
@@ -1,13 +1,18 @@
1
- export const formatBigNumber = (num, maximumFractionDigits) => {
1
+ export const formatBigNumber = (num, maximumFractionDigits)=>{
2
2
  let formatedNum = num;
3
- const ranks = ['', 'K', 'M'];
3
+ const ranks = [
4
+ '',
5
+ 'K',
6
+ 'M'
7
+ ];
4
8
  let rankIndex = 0;
5
- while (formatedNum > 10000 && rankIndex < ranks.length - 1) {
9
+ while(formatedNum > 10000 && rankIndex < ranks.length - 1){
6
10
  formatedNum /= 1000;
7
11
  rankIndex++;
8
12
  }
9
- return (formatedNum.toLocaleString(undefined, {
10
- maximumFractionDigits,
11
- }) + ranks[rankIndex]);
13
+ return formatedNum.toLocaleString(undefined, {
14
+ maximumFractionDigits
15
+ }) + ranks[rankIndex];
12
16
  };
17
+
13
18
  //# sourceMappingURL=format-big-numbers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-big-numbers.js","sourceRoot":"","sources":["../../src/utils/format-big-numbers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,qBAA6B,EAAE,EAAE;IAC1E,IAAI,WAAW,GAAG,GAAG,CAAC;IACtB,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,WAAW,IAAI,IAAI,CAAC;QACpB,SAAS,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CACH,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE;QAClC,qBAAqB;KACxB,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CACxB,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/format-big-numbers.ts"],"sourcesContent":["export const formatBigNumber = (num: number, maximumFractionDigits: number) => {\n let formatedNum = num;\n const ranks = ['', 'K', 'M'];\n let rankIndex = 0;\n while (formatedNum > 10000 && rankIndex < ranks.length - 1) {\n formatedNum /= 1000;\n rankIndex++;\n }\n\n return (\n formatedNum.toLocaleString(undefined, {\n maximumFractionDigits,\n }) + ranks[rankIndex]\n );\n};\n"],"names":["formatBigNumber","num","maximumFractionDigits","formatedNum","ranks","rankIndex","length","toLocaleString","undefined"],"mappings":"AAAA,OAAO,MAAMA,kBAAkB,CAACC,KAAaC;IACzC,IAAIC,cAAcF;IAClB,MAAMG,QAAQ;QAAC;QAAI;QAAK;KAAI;IAC5B,IAAIC,YAAY;IAChB,MAAOF,cAAc,SAASE,YAAYD,MAAME,MAAM,GAAG,EAAG;QACxDH,eAAe;QACfE;IACJ;IAEA,OACIF,YAAYI,cAAc,CAACC,WAAW;QAClCN;IACJ,KAAKE,KAAK,CAACC,UAAU;AAE7B,EAAE"}
@@ -1,5 +1,5 @@
1
1
  import * as accounting from 'accounting';
2
- const formatPercentValue = (value) => {
2
+ const formatPercentValue = (value)=>{
3
3
  if (!value) {
4
4
  return '0';
5
5
  }
@@ -10,7 +10,7 @@ const formatPercentValue = (value) => {
10
10
  const valueDecimal = Math.max(Math.floor(value * 10) - valueMain * 10, 1);
11
11
  return `0.${valueDecimal}`;
12
12
  };
13
- export const formatRate = (value) => {
13
+ export const formatRate = (value)=>{
14
14
  if (!value) {
15
15
  return '0.0x';
16
16
  }
@@ -18,11 +18,11 @@ export const formatRate = (value) => {
18
18
  const valueDecimal = Math.floor(value * 10) - valueMain * 10;
19
19
  return `${valueMain}.${valueDecimal}x`;
20
20
  };
21
- export const formatMoney = (value) => (value < 0 ? '-' : '') + accounting.formatMoney(Math.abs(value), undefined, 0);
22
- export const formatPercent100 = (value) => `${formatPercentValue(value)}%`;
23
- export const formatPercent = (value) => formatPercent100(value * 100);
24
- export const formatNumber = (value) => accounting.formatNumber(value, 0, ',');
25
- export const formatValue = (value, format) => {
21
+ export const formatMoney = (value)=>(value < 0 ? '-' : '') + accounting.formatMoney(Math.abs(value), undefined, 0);
22
+ export const formatPercent100 = (value)=>`${formatPercentValue(value)}%`;
23
+ export const formatPercent = (value)=>formatPercent100(value * 100);
24
+ export const formatNumber = (value)=>accounting.formatNumber(value, 0, ',');
25
+ export const formatValue = (value, format)=>{
26
26
  if (format === 'money') {
27
27
  return formatMoney(value);
28
28
  }
@@ -40,4 +40,5 @@ export const formatValue = (value, format) => {
40
40
  }
41
41
  return formatNumber(value);
42
42
  };
43
+
43
44
  //# sourceMappingURL=formatters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAIzC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAU,EAAE;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1D,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1E,OAAO,KAAK,YAAY,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;IAE7D,OAAO,GAAG,SAAS,IAAI,YAAY,GAAG,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CACjD,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,MAAwB,EAAE,EAAE;IACnE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/formatters.ts"],"sourcesContent":["import * as accounting from 'accounting';\n\nexport type NumberFormatter = 'money' | 'percent' | 'percent-100' | 'number' | 'rate';\n\nconst formatPercentValue = (value: number): string => {\n if (!value) {\n return '0';\n }\n\n const valueMain = value ? Math.abs(Math.round(value)) : 0;\n\n if (valueMain > 0) {\n return accounting.formatNumber(valueMain, 0);\n }\n\n const valueDecimal = Math.max(Math.floor(value * 10) - valueMain * 10, 1);\n\n return `0.${valueDecimal}`;\n};\n\nexport const formatRate = (value: number): string => {\n if (!value) {\n return '0.0x';\n }\n\n const valueMain = value ? Math.abs(Math.floor(value)) : 0;\n const valueDecimal = Math.floor(value * 10) - valueMain * 10;\n\n return `${valueMain}.${valueDecimal}x`;\n};\n\nexport const formatMoney = (value: number): string =>\n (value < 0 ? '-' : '') + accounting.formatMoney(Math.abs(value), undefined, 0);\nexport const formatPercent100 = (value: number): string => `${formatPercentValue(value)}%`;\nexport const formatPercent = (value: number): string => formatPercent100(value * 100);\nexport const formatNumber = (value: number): string => accounting.formatNumber(value, 0, ',');\n\nexport const formatValue = (value: number, format?: NumberFormatter) => {\n if (format === 'money') {\n return formatMoney(value);\n }\n\n if (format === 'percent') {\n return formatPercent(value);\n }\n\n if (format === 'percent-100') {\n return formatPercent100(value);\n }\n\n if (format === 'number') {\n return formatNumber(value);\n }\n\n if (format === 'rate') {\n return formatRate(value);\n }\n\n return formatNumber(value);\n};\n"],"names":["accounting","formatPercentValue","value","valueMain","Math","abs","round","formatNumber","valueDecimal","max","floor","formatRate","formatMoney","undefined","formatPercent100","formatPercent","formatValue","format"],"mappings":"AAAA,YAAYA,gBAAgB,aAAa;AAIzC,MAAMC,qBAAqB,CAACC;IACxB,IAAI,CAACA,OAAO;QACR,OAAO;IACX;IAEA,MAAMC,YAAYD,QAAQE,KAAKC,GAAG,CAACD,KAAKE,KAAK,CAACJ,UAAU;IAExD,IAAIC,YAAY,GAAG;QACf,OAAOH,WAAWO,YAAY,CAACJ,WAAW;IAC9C;IAEA,MAAMK,eAAeJ,KAAKK,GAAG,CAACL,KAAKM,KAAK,CAACR,QAAQ,MAAMC,YAAY,IAAI;IAEvE,OAAO,CAAC,EAAE,EAAEK,cAAc;AAC9B;AAEA,OAAO,MAAMG,aAAa,CAACT;IACvB,IAAI,CAACA,OAAO;QACR,OAAO;IACX;IAEA,MAAMC,YAAYD,QAAQE,KAAKC,GAAG,CAACD,KAAKM,KAAK,CAACR,UAAU;IACxD,MAAMM,eAAeJ,KAAKM,KAAK,CAACR,QAAQ,MAAMC,YAAY;IAE1D,OAAO,GAAGA,UAAU,CAAC,EAAEK,aAAa,CAAC,CAAC;AAC1C,EAAE;AAEF,OAAO,MAAMI,cAAc,CAACV,QACxB,AAACA,CAAAA,QAAQ,IAAI,MAAM,EAAC,IAAKF,WAAWY,WAAW,CAACR,KAAKC,GAAG,CAACH,QAAQW,WAAW,GAAG;AACnF,OAAO,MAAMC,mBAAmB,CAACZ,QAA0B,GAAGD,mBAAmBC,OAAO,CAAC,CAAC,CAAC;AAC3F,OAAO,MAAMa,gBAAgB,CAACb,QAA0BY,iBAAiBZ,QAAQ,KAAK;AACtF,OAAO,MAAMK,eAAe,CAACL,QAA0BF,WAAWO,YAAY,CAACL,OAAO,GAAG,KAAK;AAE9F,OAAO,MAAMc,cAAc,CAACd,OAAee;IACvC,IAAIA,WAAW,SAAS;QACpB,OAAOL,YAAYV;IACvB;IAEA,IAAIe,WAAW,WAAW;QACtB,OAAOF,cAAcb;IACzB;IAEA,IAAIe,WAAW,eAAe;QAC1B,OAAOH,iBAAiBZ;IAC5B;IAEA,IAAIe,WAAW,UAAU;QACrB,OAAOV,aAAaL;IACxB;IAEA,IAAIe,WAAW,QAAQ;QACnB,OAAON,WAAWT;IACtB;IAEA,OAAOK,aAAaL;AACxB,EAAE"}
@@ -1,4 +1,4 @@
1
- export const keys = (obj) => Object.keys(obj);
1
+ export const keys = (obj)=>Object.keys(obj);
2
2
  /**
3
3
  * Searches for words (divided by white space) in the string,
4
4
  * i.e `findSubstrIndexes('91203 - Glendale, CA', 'glen 912')`
@@ -9,33 +9,30 @@ export const keys = (obj) => Object.keys(obj);
9
9
  * @param str - String to search in
10
10
  * @param substr - Searched words, i.e 'hello world'
11
11
  * @returns Array of start and end indexes of the words
12
- */
13
- export const findSubstrIndexes = (str, substr) => {
12
+ */ export const findSubstrIndexes = (str, substr)=>{
14
13
  const searchWords = substr.split(' ');
15
- const realSearchWords = searchWords.filter(word => word !== '');
16
- const indexes = realSearchWords.map(word => {
14
+ const realSearchWords = searchWords.filter((word)=>word !== '');
15
+ const indexes = realSearchWords.map((word)=>{
17
16
  const index = str.toLowerCase().indexOf(word.toLowerCase());
18
17
  return {
19
18
  start: index,
20
- end: index + word.length,
19
+ end: index + word.length
21
20
  };
22
21
  });
23
- const realIndexes = indexes
24
- .filter(index => index.start !== -1)
25
- .sort((indexA, indexB) => indexA.start - indexB.start);
22
+ const realIndexes = indexes.filter((index)=>index.start !== -1).sort((indexA, indexB)=>indexA.start - indexB.start);
26
23
  const realRanges = [];
27
24
  if (realIndexes.length >= 1) {
28
25
  realRanges.push(realIndexes[0]);
29
- for (let i = 1; i < realIndexes.length; i++) {
26
+ for(let i = 1; i < realIndexes.length; i++){
30
27
  const lastRealRange = realRanges[realRanges.length - 1];
31
28
  if (realIndexes[i].start < lastRealRange.end) {
32
29
  lastRealRange.end = realIndexes[i].end;
33
- }
34
- else {
30
+ } else {
35
31
  realRanges.push(realIndexes[i]);
36
32
  }
37
33
  }
38
34
  }
39
35
  return realRanges;
40
36
  };
37
+
41
38
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAgC,GAAM,EAAe,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE7F;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE;IAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM;SAC3B,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,OAAO;SACtB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;SACnC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC;gBAC3C,aAAa,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/helpers.ts"],"sourcesContent":["export const keys = <T extends Record<string, any>>(obj: T): (keyof T)[] => Object.keys(obj);\n\n/**\n * Searches for words (divided by white space) in the string,\n * i.e `findSubstrIndexes('91203 - Glendale, CA', 'glen 912')`\n * returns `[\n * { start: 0, end: 3 },\n * { start: 8, end: 12 },\n * ]`\n * @param str - String to search in\n * @param substr - Searched words, i.e 'hello world'\n * @returns Array of start and end indexes of the words\n */\nexport const findSubstrIndexes = (str: string, substr: string) => {\n const searchWords = substr.split(' ');\n const realSearchWords = searchWords.filter(word => word !== '');\n const indexes = realSearchWords.map(word => {\n const index = str.toLowerCase().indexOf(word.toLowerCase());\n return {\n start: index,\n end: index + word.length,\n };\n });\n\n const realIndexes = indexes\n .filter(index => index.start !== -1)\n .sort((indexA, indexB) => indexA.start - indexB.start);\n\n const realRanges = [];\n\n if (realIndexes.length >= 1) {\n realRanges.push(realIndexes[0]);\n for (let i = 1; i < realIndexes.length; i++) {\n const lastRealRange = realRanges[realRanges.length - 1];\n if (realIndexes[i].start < lastRealRange.end) {\n lastRealRange.end = realIndexes[i].end;\n } else {\n realRanges.push(realIndexes[i]);\n }\n }\n }\n\n return realRanges;\n};\n"],"names":["keys","obj","Object","findSubstrIndexes","str","substr","searchWords","split","realSearchWords","filter","word","indexes","map","index","toLowerCase","indexOf","start","end","length","realIndexes","sort","indexA","indexB","realRanges","push","i","lastRealRange"],"mappings":"AAAA,OAAO,MAAMA,OAAO,CAAgCC,MAAwBC,OAAOF,IAAI,CAACC,KAAK;AAE7F;;;;;;;;;;CAUC,GACD,OAAO,MAAME,oBAAoB,CAACC,KAAaC;IAC3C,MAAMC,cAAcD,OAAOE,KAAK,CAAC;IACjC,MAAMC,kBAAkBF,YAAYG,MAAM,CAACC,CAAAA,OAAQA,SAAS;IAC5D,MAAMC,UAAUH,gBAAgBI,GAAG,CAACF,CAAAA;QAChC,MAAMG,QAAQT,IAAIU,WAAW,GAAGC,OAAO,CAACL,KAAKI,WAAW;QACxD,OAAO;YACHE,OAAOH;YACPI,KAAKJ,QAAQH,KAAKQ,MAAM;QAC5B;IACJ;IAEA,MAAMC,cAAcR,QACfF,MAAM,CAACI,CAAAA,QAASA,MAAMG,KAAK,KAAK,CAAC,GACjCI,IAAI,CAAC,CAACC,QAAQC,SAAWD,OAAOL,KAAK,GAAGM,OAAON,KAAK;IAEzD,MAAMO,aAAa,EAAE;IAErB,IAAIJ,YAAYD,MAAM,IAAI,GAAG;QACzBK,WAAWC,IAAI,CAACL,WAAW,CAAC,EAAE;QAC9B,IAAK,IAAIM,IAAI,GAAGA,IAAIN,YAAYD,MAAM,EAAEO,IAAK;YACzC,MAAMC,gBAAgBH,UAAU,CAACA,WAAWL,MAAM,GAAG,EAAE;YACvD,IAAIC,WAAW,CAACM,EAAE,CAACT,KAAK,GAAGU,cAAcT,GAAG,EAAE;gBAC1CS,cAAcT,GAAG,GAAGE,WAAW,CAACM,EAAE,CAACR,GAAG;YAC1C,OAAO;gBACHM,WAAWC,IAAI,CAACL,WAAW,CAACM,EAAE;YAClC;QACJ;IACJ;IAEA,OAAOF;AACX,EAAE"}
@@ -1,27 +1,24 @@
1
- const joinUrlParameter = (url, key, value) => {
1
+ const joinUrlParameter = (url, key, value)=>{
2
2
  const separator = url.includes('?') ? '&' : '?';
3
3
  return `${url}${separator}${key}=${encodeURIComponent(value)}`;
4
4
  };
5
- const readTenantAuthParam = (paramName) => new URLSearchParams(window.location.search).get(paramName);
5
+ const readTenantAuthParam = (paramName)=>new URLSearchParams(window.location.search).get(paramName);
6
6
  /**
7
7
  * @see https://servicetitan.atlassian.net/wiki/spaces/EN/pages/2459272255/Frontend+redirect+issue
8
- */
9
- export function execPartnerRedirect(res, target) {
10
- var _a, _b;
11
- if ((res === null || res === void 0 ? void 0 : res.status) === 401 && ((_a = res.data) === null || _a === void 0 ? void 0 : _a.redirect_uri) && ((_b = res.data) === null || _b === void 0 ? void 0 : _b.redirect_query_param)) {
8
+ */ export function execPartnerRedirect(res, target) {
9
+ var _res_data, _res_data1;
10
+ if ((res === null || res === void 0 ? void 0 : res.status) === 401 && ((_res_data = res.data) === null || _res_data === void 0 ? void 0 : _res_data.redirect_uri) && ((_res_data1 = res.data) === null || _res_data1 === void 0 ? void 0 : _res_data1.redirect_query_param)) {
12
11
  let uri = joinUrlParameter(res.data.redirect_uri, res.data.redirect_query_param, window.location.href);
13
- /** @see https://servicetitan.atlassian.net/browse/MPA-1255 */
14
- if (res.data.auth_tenant_query_param && res.data.auth_tenant_query_param_source) {
12
+ /** @see https://servicetitan.atlassian.net/browse/MPA-1255 */ if (res.data.auth_tenant_query_param && res.data.auth_tenant_query_param_source) {
15
13
  const tenantParam = readTenantAuthParam(res.data.auth_tenant_query_param_source);
16
- uri = tenantParam
17
- ? joinUrlParameter(uri, res.data.auth_tenant_query_param, tenantParam)
18
- : uri;
14
+ uri = tenantParam ? joinUrlParameter(uri, res.data.auth_tenant_query_param, tenantParam) : uri;
19
15
  }
20
16
  return window.open(uri, target !== null && target !== void 0 ? target : '_self');
21
17
  }
22
18
  return true;
23
19
  }
24
20
  export function initAuthHandlers(axiosInstane, target) {
25
- return axiosInstane.interceptors.response.use(response => response, res => execPartnerRedirect(res.response, target) && Promise.reject(res));
21
+ return axiosInstane.interceptors.response.use((response)=>response, (res)=>execPartnerRedirect(res.response, target) && Promise.reject(res));
26
22
  }
23
+
27
24
  //# sourceMappingURL=marketing-parner-handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marketing-parner-handlers.js","sourceRoot":"","sources":["../../src/utils/marketing-parner-handlers.ts"],"names":[],"mappings":"AAYA,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;IACjE,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,OAAO,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,EAAE,CAC9C,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAC/B,GAAwD,EACxD,MAAuB;;IAEvB,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,MAAK,GAAG,KAAI,MAAA,GAAG,CAAC,IAAI,0CAAE,YAAY,CAAA,KAAI,MAAA,GAAG,CAAC,IAAI,0CAAE,oBAAoB,CAAA,EAAE,CAAC;QAClF,IAAI,GAAG,GAAG,gBAAgB,CACtB,GAAG,CAAC,IAAI,CAAC,YAAY,EACrB,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,CACvB,CAAC;QAEF,8DAA8D;QAC9D,IAAI,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC;YAC9E,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACjF,GAAG,GAAG,WAAW;gBACb,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC;gBACtE,CAAC,CAAC,GAAG,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAA2B,EAAE,MAAuB;IACjF,OAAO,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACzC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EACpB,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAC1E,CAAC;AACN,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/marketing-parner-handlers.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport interface AuthResponse {\n redirect_uri: string;\n redirect_query_param: string;\n auth_tenant_query_param?: string;\n auth_tenant_query_param_source?: string;\n}\n\nexport type RedirectTarget = '_self' | '_blank' | '_parent' | '_top';\n\nconst joinUrlParameter = (url: string, key: string, value: string) => {\n const separator = url.includes('?') ? '&' : '?';\n return `${url}${separator}${key}=${encodeURIComponent(value)}`;\n};\n\nconst readTenantAuthParam = (paramName: string) =>\n new URLSearchParams(window.location.search).get(paramName);\n\n/**\n * @see https://servicetitan.atlassian.net/wiki/spaces/EN/pages/2459272255/Frontend+redirect+issue\n */\nexport function execPartnerRedirect(\n res: { status: number; data?: AuthResponse } | undefined,\n target?: RedirectTarget\n) {\n if (res?.status === 401 && res.data?.redirect_uri && res.data?.redirect_query_param) {\n let uri = joinUrlParameter(\n res.data.redirect_uri,\n res.data.redirect_query_param,\n window.location.href\n );\n\n /** @see https://servicetitan.atlassian.net/browse/MPA-1255 */\n if (res.data.auth_tenant_query_param && res.data.auth_tenant_query_param_source) {\n const tenantParam = readTenantAuthParam(res.data.auth_tenant_query_param_source);\n uri = tenantParam\n ? joinUrlParameter(uri, res.data.auth_tenant_query_param, tenantParam)\n : uri;\n }\n\n return window.open(uri, target ?? '_self');\n }\n\n return true;\n}\n\nexport function initAuthHandlers(axiosInstane: AxiosInstance, target?: RedirectTarget) {\n return axiosInstane.interceptors.response.use(\n response => response,\n res => execPartnerRedirect(res.response, target) && Promise.reject(res)\n );\n}\n"],"names":["joinUrlParameter","url","key","value","separator","includes","encodeURIComponent","readTenantAuthParam","paramName","URLSearchParams","window","location","search","get","execPartnerRedirect","res","target","status","data","redirect_uri","redirect_query_param","uri","href","auth_tenant_query_param","auth_tenant_query_param_source","tenantParam","open","initAuthHandlers","axiosInstane","interceptors","response","use","Promise","reject"],"mappings":"AAYA,MAAMA,mBAAmB,CAACC,KAAaC,KAAaC;IAChD,MAAMC,YAAYH,IAAII,QAAQ,CAAC,OAAO,MAAM;IAC5C,OAAO,GAAGJ,MAAMG,YAAYF,IAAI,CAAC,EAAEI,mBAAmBH,QAAQ;AAClE;AAEA,MAAMI,sBAAsB,CAACC,YACzB,IAAIC,gBAAgBC,OAAOC,QAAQ,CAACC,MAAM,EAAEC,GAAG,CAACL;AAEpD;;CAEC,GACD,OAAO,SAASM,oBACZC,GAAwD,EACxDC,MAAuB;QAEID,WAA0BA;IAArD,IAAIA,CAAAA,gBAAAA,0BAAAA,IAAKE,MAAM,MAAK,SAAOF,YAAAA,IAAIG,IAAI,cAARH,gCAAAA,UAAUI,YAAY,OAAIJ,aAAAA,IAAIG,IAAI,cAARH,iCAAAA,WAAUK,oBAAoB,GAAE;QACjF,IAAIC,MAAMrB,iBACNe,IAAIG,IAAI,CAACC,YAAY,EACrBJ,IAAIG,IAAI,CAACE,oBAAoB,EAC7BV,OAAOC,QAAQ,CAACW,IAAI;QAGxB,4DAA4D,GAC5D,IAAIP,IAAIG,IAAI,CAACK,uBAAuB,IAAIR,IAAIG,IAAI,CAACM,8BAA8B,EAAE;YAC7E,MAAMC,cAAclB,oBAAoBQ,IAAIG,IAAI,CAACM,8BAA8B;YAC/EH,MAAMI,cACAzB,iBAAiBqB,KAAKN,IAAIG,IAAI,CAACK,uBAAuB,EAAEE,eACxDJ;QACV;QAEA,OAAOX,OAAOgB,IAAI,CAACL,KAAKL,mBAAAA,oBAAAA,SAAU;IACtC;IAEA,OAAO;AACX;AAEA,OAAO,SAASW,iBAAiBC,YAA2B,EAAEZ,MAAuB;IACjF,OAAOY,aAAaC,YAAY,CAACC,QAAQ,CAACC,GAAG,CACzCD,CAAAA,WAAYA,UACZf,CAAAA,MAAOD,oBAAoBC,IAAIe,QAAQ,EAAEd,WAAWgB,QAAQC,MAAM,CAAClB;AAE3E"}
@@ -5,4 +5,5 @@ export function camelCaseToTitleCase(value) {
5
5
  const regexp = /[A-Z](?=[A-Z][a-z])|[^A-Z](?=[A-Z])|[A-Za-z](?=[^A-Za-z])/g;
6
6
  return capitalize(value.replace(regexp, '$& '));
7
7
  }
8
+
8
9
  //# sourceMappingURL=string-case.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"string-case.js","sourceRoot":"","sources":["../../src/utils/string-case.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAC9C,MAAM,MAAM,GAAG,4DAA4D,CAAC;IAE5E,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/string-case.ts"],"sourcesContent":["export function capitalize(value: string) {\n return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;\n}\n\nexport function camelCaseToTitleCase(value: string) {\n const regexp = /[A-Z](?=[A-Z][a-z])|[^A-Z](?=[A-Z])|[A-Za-z](?=[^A-Za-z])/g;\n\n return capitalize(value.replace(regexp, '$& '));\n}\n"],"names":["capitalize","value","charAt","toUpperCase","slice","camelCaseToTitleCase","regexp","replace"],"mappings":"AAAA,OAAO,SAASA,WAAWC,KAAa;IACpC,OAAOA,QAAQA,MAAMC,MAAM,CAAC,GAAGC,WAAW,KAAKF,MAAMG,KAAK,CAAC,KAAKH;AACpE;AAEA,OAAO,SAASI,qBAAqBJ,KAAa;IAC9C,MAAMK,SAAS;IAEf,OAAON,WAAWC,MAAMM,OAAO,CAACD,QAAQ;AAC5C"}
@@ -1,45 +1,45 @@
1
1
  import { useCallback, useEffect, useRef, useState } from 'react';
2
- export const useClientRect = () => {
2
+ export const useClientRect = ()=>{
3
3
  const element = useRef(null);
4
4
  const [rect, setRect] = useState(null);
5
- const handleResize = useCallback(() => {
5
+ const handleResize = useCallback(()=>{
6
6
  if (element.current) {
7
7
  setRect(element.current.getBoundingClientRect());
8
8
  }
9
9
  }, []);
10
- useEffect(() => {
10
+ useEffect(()=>{
11
11
  if (!rect) {
12
12
  return;
13
13
  }
14
14
  /*
15
15
  * we have to wait here because element size could be changed after render
16
16
  * and there is no other way to handle this situation
17
- */
18
- const to = setTimeout(() => {
19
- var _a;
20
- const newRect = (_a = element.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
21
- if (newRect &&
22
- rect &&
23
- (newRect.width !== rect.width ||
24
- newRect.height !== rect.height ||
25
- newRect.x !== rect.x ||
26
- newRect.y !== rect.y)) {
17
+ */ const to = setTimeout(()=>{
18
+ var _element_current;
19
+ const newRect = (_element_current = element.current) === null || _element_current === void 0 ? void 0 : _element_current.getBoundingClientRect();
20
+ if (newRect && rect && (newRect.width !== rect.width || newRect.height !== rect.height || newRect.x !== rect.x || newRect.y !== rect.y)) {
27
21
  setRect(newRect);
28
22
  }
29
23
  }, 0);
30
- return () => clearTimeout(to);
24
+ return ()=>clearTimeout(to);
31
25
  });
32
- const ref = useCallback((node) => {
26
+ const ref = useCallback((node)=>{
33
27
  if (node !== null) {
34
28
  window.addEventListener('resize', handleResize);
35
29
  setRect(node.getBoundingClientRect());
36
- }
37
- else {
30
+ } else {
38
31
  window.removeEventListener('resize', handleResize);
39
32
  setRect(null);
40
33
  }
41
34
  element.current = node;
42
- }, [handleResize]);
43
- return [rect, ref, element.current];
35
+ }, [
36
+ handleResize
37
+ ]);
38
+ return [
39
+ rect,
40
+ ref,
41
+ element.current
42
+ ];
44
43
  };
44
+
45
45
  //# sourceMappingURL=use-client-rect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-client-rect.js","sourceRoot":"","sources":["../../src/utils/use-client-rect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG,GAI3B,EAAE;IACA,MAAM,OAAO,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACrD,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED;;;WAGG;QACH,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;;YACvB,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,0CAAE,qBAAqB,EAAE,CAAC;YAEzD,IACI,OAAO;gBACP,IAAI;gBACJ,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;oBACzB,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;oBAC9B,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;oBACpB,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAC3B,CAAC;gBACC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QACL,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,WAAW,CACnB,CAAC,IAAwB,EAAE,EAAE;QACzB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAC3B,CAAC,EACD,CAAC,YAAY,CAAC,CACjB,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/use-client-rect.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport const useClientRect = (): [\n DOMRect | null,\n (node: HTMLElement | null) => void,\n HTMLElement | null,\n] => {\n const element = useRef<HTMLElement | null>(null);\n const [rect, setRect] = useState<DOMRect | null>(null);\n\n const handleResize = useCallback(() => {\n if (element.current) {\n setRect(element.current.getBoundingClientRect());\n }\n }, []);\n\n useEffect(() => {\n if (!rect) {\n return;\n }\n\n /*\n * we have to wait here because element size could be changed after render\n * and there is no other way to handle this situation\n */\n const to = setTimeout(() => {\n const newRect = element.current?.getBoundingClientRect();\n\n if (\n newRect &&\n rect &&\n (newRect.width !== rect.width ||\n newRect.height !== rect.height ||\n newRect.x !== rect.x ||\n newRect.y !== rect.y)\n ) {\n setRect(newRect);\n }\n }, 0);\n\n return () => clearTimeout(to);\n });\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n if (node !== null) {\n window.addEventListener('resize', handleResize);\n setRect(node.getBoundingClientRect());\n } else {\n window.removeEventListener('resize', handleResize);\n setRect(null);\n }\n element.current = node;\n },\n [handleResize]\n );\n\n return [rect, ref, element.current];\n};\n"],"names":["useCallback","useEffect","useRef","useState","useClientRect","element","rect","setRect","handleResize","current","getBoundingClientRect","to","setTimeout","newRect","width","height","x","y","clearTimeout","ref","node","window","addEventListener","removeEventListener"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAEjE,OAAO,MAAMC,gBAAgB;IAKzB,MAAMC,UAAUH,OAA2B;IAC3C,MAAM,CAACI,MAAMC,QAAQ,GAAGJ,SAAyB;IAEjD,MAAMK,eAAeR,YAAY;QAC7B,IAAIK,QAAQI,OAAO,EAAE;YACjBF,QAAQF,QAAQI,OAAO,CAACC,qBAAqB;QACjD;IACJ,GAAG,EAAE;IAELT,UAAU;QACN,IAAI,CAACK,MAAM;YACP;QACJ;QAEA;;;SAGC,GACD,MAAMK,KAAKC,WAAW;gBACFP;YAAhB,MAAMQ,WAAUR,mBAAAA,QAAQI,OAAO,cAAfJ,uCAAAA,iBAAiBK,qBAAqB;YAEtD,IACIG,WACAP,QACCO,CAAAA,QAAQC,KAAK,KAAKR,KAAKQ,KAAK,IACzBD,QAAQE,MAAM,KAAKT,KAAKS,MAAM,IAC9BF,QAAQG,CAAC,KAAKV,KAAKU,CAAC,IACpBH,QAAQI,CAAC,KAAKX,KAAKW,CAAC,AAADA,GACzB;gBACEV,QAAQM;YACZ;QACJ,GAAG;QAEH,OAAO,IAAMK,aAAaP;IAC9B;IAEA,MAAMQ,MAAMnB,YACR,CAACoB;QACG,IAAIA,SAAS,MAAM;YACfC,OAAOC,gBAAgB,CAAC,UAAUd;YAClCD,QAAQa,KAAKV,qBAAqB;QACtC,OAAO;YACHW,OAAOE,mBAAmB,CAAC,UAAUf;YACrCD,QAAQ;QACZ;QACAF,QAAQI,OAAO,GAAGW;IACtB,GACA;QAACZ;KAAa;IAGlB,OAAO;QAACF;QAAMa;QAAKd,QAAQI,OAAO;KAAC;AACvC,EAAE"}
@@ -1,9 +1,10 @@
1
1
  import { useLocalStore } from 'mobx-react';
2
2
  import { action } from 'mobx';
3
- export const useTargetRangeStore = () => useLocalStore(() => ({
4
- targetRange: undefined,
5
- setTargetRange: action(function (range) {
6
- this.targetRange = range;
7
- }),
8
- }));
3
+ export const useTargetRangeStore = ()=>useLocalStore(()=>({
4
+ targetRange: undefined,
5
+ setTargetRange: action(function(range) {
6
+ this.targetRange = range;
7
+ })
8
+ }));
9
+
9
10
  //# sourceMappingURL=use-target-range-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-target-range-store.js","sourceRoot":"","sources":["../../src/utils/use-target-range-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAS9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CACpC,aAAa,CAAmB,GAAG,EAAE,CAAC,CAAC;IACnC,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,MAAM,CAAC,UAAkC,KAAoB;QACzE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC,CAAC;CACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../src/utils/use-target-range-store.ts"],"sourcesContent":["import { useLocalStore } from 'mobx-react';\nimport { action } from 'mobx';\n\nexport type OptionalRange = Range | undefined;\n\nexport interface TargetRangeStore {\n targetRange: OptionalRange;\n setTargetRange: (range: OptionalRange) => void;\n}\n\nexport const useTargetRangeStore = () =>\n useLocalStore<TargetRangeStore>(() => ({\n targetRange: undefined,\n setTargetRange: action(function (this: TargetRangeStore, range: OptionalRange) {\n this.targetRange = range;\n }),\n }));\n"],"names":["useLocalStore","action","useTargetRangeStore","targetRange","undefined","setTargetRange","range"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,MAAM,QAAQ,OAAO;AAS9B,OAAO,MAAMC,sBAAsB,IAC/BF,cAAgC,IAAO,CAAA;YACnCG,aAAaC;YACbC,gBAAgBJ,OAAO,SAAkCK,KAAoB;gBACzE,IAAI,CAACH,WAAW,GAAGG;YACvB;QACJ,CAAA,GAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/marketing-ui",
3
- "version": "5.9.0",
3
+ "version": "5.10.0",
4
4
  "description": "Marketing UI component and utils",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,7 +14,7 @@
14
14
  "src"
15
15
  ],
16
16
  "dependencies": {
17
- "classnames": "~2.3.1",
17
+ "classnames": "^2.3.1",
18
18
  "react-image-crop": "8.6.5"
19
19
  },
20
20
  "peerDependencies": {
@@ -30,19 +30,19 @@
30
30
  },
31
31
  "devDependencies": {
32
32
  "@servicetitan/design-system": "~14.5.1",
33
- "@servicetitan/react-ioc": "^30.0.0",
34
- "@servicetitan/tokens": ">=12.1.11",
35
- "@testing-library/react": "^14.0.0",
33
+ "@servicetitan/react-ioc": "^31.3.2",
34
+ "@servicetitan/tokens": ">=12.2.1",
35
+ "@testing-library/react": "^14.2.1",
36
36
  "@types/accounting": "~0.4.2",
37
- "@types/history": "~4.7.7",
37
+ "@types/history": "~4.7.10",
38
38
  "@types/react": "~18.2.55",
39
39
  "@types/react-image-crop": "8.1.2",
40
40
  "accounting": "~0.4.1",
41
- "axios": ">=0.20.0",
41
+ "axios": "~0.30.0",
42
42
  "mobx": "~6.10.2",
43
- "mobx-react": "~9.0.2",
44
- "moment": "~2.29.1",
45
- "react": "~18.2.0"
43
+ "mobx-react": "^9.2.0",
44
+ "moment": "~2.29.3",
45
+ "react": "^18.2.0"
46
46
  },
47
47
  "publishConfig": {
48
48
  "access": "public"
@@ -51,5 +51,5 @@
51
51
  "less": true,
52
52
  "webpack": false
53
53
  },
54
- "gitHead": "c1d645b3e5643ba5a50e4898d9f786212334792a"
54
+ "gitHead": "7fc7b9cbf766fe23879ae81831f28bdd96559bce"
55
55
  }
@@ -1,76 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { FunnelChart } from './index';
3
- import { BodyText } from '@servicetitan/design-system';
4
- export default {
5
- title: 'Marketing UI/charts/FunnelChart',
6
- component: FunnelChart,
7
- parameters: {},
8
- };
9
- const w = (cb) => () => (_jsx("div", { style: { height: '300px', width: '420px' }, children: cb() }));
10
- const sections3 = () => [
11
- {
12
- id: 1,
13
- color: '#A9D1FF',
14
- title: 'Revenue',
15
- description: 'rate 1 description',
16
- value: 0.33,
17
- prev: 0.38,
18
- data: { info: ['random text 1'] },
19
- },
20
- {
21
- id: 2,
22
- color: '#3684F5',
23
- title: 'Budget',
24
- description: 'rate 2 description',
25
- value: 0.23,
26
- prev: 0.21,
27
- data: { info: ['random text 2', 'random text 22'] },
28
- },
29
- {
30
- id: 3,
31
- color: '#1360D9',
32
- title: 'Sales',
33
- description: 'rate 3 description',
34
- value: 0.11,
35
- prev: 0.11,
36
- textClass: 'c-white',
37
- },
38
- ];
39
- const CustomPopoverContent = ({ data }) => (data === null || data === void 0 ? void 0 : data.info.length) ? (_jsx("div", { children: data.info.map(t => (_jsx(BodyText, { children: t }, t))) })) : null;
40
- export const funnelChart3Sections = w(() => (_jsx(FunnelChart, { format: "percent", sections: sections3() })));
41
- export const funnelChart4Sections = w(() => (_jsx(FunnelChart, { format: "percent", sections: [
42
- {
43
- id: 1,
44
- color: '#A9D1FF',
45
- title: 'Revenue',
46
- description: 'rate 1 description',
47
- value: 0.33,
48
- prev: 0.38,
49
- },
50
- {
51
- id: 2,
52
- color: '#56A4FF',
53
- title: 'Budget',
54
- description: 'rate 2 description',
55
- value: 0.23,
56
- prev: 0.21,
57
- },
58
- {
59
- id: 3,
60
- color: '#2270EE',
61
- title: 'Sales',
62
- description: 'rate 3 description',
63
- value: 0.11,
64
- prev: 0.11,
65
- },
66
- {
67
- id: 4,
68
- color: '#1360D9',
69
- title: 'Sales',
70
- description: 'rate 4 description',
71
- value: 0.22,
72
- prev: 0.221,
73
- },
74
- ] })));
75
- export const funnelChartCustomContent = w(() => (_jsx(FunnelChart, { format: "percent", topSideLength: 80, bottomSideLength: 20, sections: sections3(), popoverContent: CustomPopoverContent })));
76
- //# sourceMappingURL=funnel-chart.stories.js.map