@bpd-library/utilities 1.2.8-beta.2 → 1.2.8-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/dist/esm/api/http.js +120 -0
  2. package/dist/esm/api/http.js.map +1 -0
  3. package/dist/esm/api/index.js +11 -0
  4. package/dist/esm/api/index.js.map +1 -0
  5. package/dist/esm/api-utilities/compose-exclude-string.js +6 -0
  6. package/dist/esm/api-utilities/compose-exclude-string.js.map +1 -0
  7. package/dist/esm/api-utilities/decimal-range/merge-decimal-range.js +13 -0
  8. package/dist/esm/api-utilities/decimal-range/merge-decimal-range.js.map +1 -0
  9. package/dist/esm/api-utilities/decimal-range/merge-specification-range.js +29 -0
  10. package/dist/esm/api-utilities/decimal-range/merge-specification-range.js.map +1 -0
  11. package/dist/esm/api-utilities/district-status.js +14 -0
  12. package/dist/esm/api-utilities/district-status.js.map +1 -0
  13. package/dist/esm/api-utilities/find-filter.js +41 -0
  14. package/dist/esm/api-utilities/find-filter.js.map +1 -0
  15. package/dist/esm/api-utilities/get/coordinates.js +31 -0
  16. package/dist/esm/api-utilities/get/coordinates.js.map +1 -0
  17. package/dist/esm/api-utilities/get/layer-raster.js +4 -0
  18. package/dist/esm/api-utilities/get/layer-raster.js.map +1 -0
  19. package/dist/esm/api-utilities/show-mortgage-price.js +11 -0
  20. package/dist/esm/api-utilities/show-mortgage-price.js.map +1 -0
  21. package/dist/esm/api-utilities/show-price.js +13 -0
  22. package/dist/esm/api-utilities/show-price.js.map +1 -0
  23. package/dist/esm/constants/index.js +7 -0
  24. package/dist/esm/constants/index.js.map +1 -0
  25. package/dist/esm/date.js +11 -0
  26. package/dist/esm/date.js.map +1 -0
  27. package/dist/esm/debounce.js +25 -0
  28. package/dist/esm/debounce.js.map +1 -0
  29. package/dist/esm/dom/dom.js +9 -0
  30. package/dist/esm/dom/dom.js.map +1 -0
  31. package/dist/esm/environment.js +27 -0
  32. package/dist/esm/environment.js.map +1 -0
  33. package/dist/esm/extended-api-models/excluded-properties.js +36 -0
  34. package/dist/esm/extended-api-models/excluded-properties.js.map +1 -0
  35. package/dist/esm/extended-api-models/extended-area-projects.js +12 -0
  36. package/dist/esm/extended-api-models/extended-area-projects.js.map +1 -0
  37. package/dist/esm/extended-api-models/extended-area.js +182 -0
  38. package/dist/esm/extended-api-models/extended-area.js.map +1 -0
  39. package/dist/esm/extended-api-models/status/apartment-building-status.js +60 -0
  40. package/dist/esm/extended-api-models/status/apartment-building-status.js.map +1 -0
  41. package/dist/esm/extended-api-models/status/construction-number-status.js +20 -0
  42. package/dist/esm/extended-api-models/status/construction-number-status.js.map +1 -0
  43. package/dist/esm/extended-api-models/status/property-type-status.js +60 -0
  44. package/dist/esm/extended-api-models/status/property-type-status.js.map +1 -0
  45. package/dist/esm/extended-api-models/utilities/apartment-building-view.js +5 -0
  46. package/dist/esm/extended-api-models/utilities/apartment-building-view.js.map +1 -0
  47. package/dist/esm/extended-api-models/utilities/extended-model-price-range.js +37 -0
  48. package/dist/esm/extended-api-models/utilities/extended-model-price-range.js.map +1 -0
  49. package/dist/esm/extended-api-models/utilities/find-extended-object.js +23 -0
  50. package/dist/esm/extended-api-models/utilities/find-extended-object.js.map +1 -0
  51. package/dist/esm/extended-api-models/utilities/is-apartment.js +14 -0
  52. package/dist/esm/extended-api-models/utilities/is-apartment.js.map +1 -0
  53. package/dist/esm/function-is-true.js +13 -0
  54. package/dist/esm/function-is-true.js.map +1 -0
  55. package/dist/esm/generated/bpd-client.js +53 -0
  56. package/dist/esm/generated/bpd-client.js.map +1 -0
  57. package/dist/esm/geometry/country-bounding-box.js +14 -0
  58. package/dist/esm/geometry/country-bounding-box.js.map +1 -0
  59. package/dist/esm/geometry/geometry.js +65 -0
  60. package/dist/esm/geometry/geometry.js.map +1 -0
  61. package/dist/esm/hooks/use-click-outside.js +34 -0
  62. package/dist/esm/hooks/use-click-outside.js.map +1 -0
  63. package/dist/esm/hooks/use-form-changes.js +30 -0
  64. package/dist/esm/hooks/use-form-changes.js.map +1 -0
  65. package/dist/esm/hooks/use-history.js +15 -0
  66. package/dist/esm/hooks/use-history.js.map +1 -0
  67. package/dist/esm/hooks/use-keyboard-focus.js +14 -0
  68. package/dist/esm/hooks/use-keyboard-focus.js.map +1 -0
  69. package/dist/esm/hooks/use-lazy.js +47 -0
  70. package/dist/esm/hooks/use-lazy.js.map +1 -0
  71. package/dist/esm/hooks/use-map-storage.js +16 -0
  72. package/dist/esm/hooks/use-map-storage.js.map +1 -0
  73. package/dist/esm/hooks/use-scroll-position.js +23 -0
  74. package/dist/esm/hooks/use-scroll-position.js.map +1 -0
  75. package/dist/esm/hooks/use-scroll-to.js +66 -0
  76. package/dist/esm/hooks/use-scroll-to.js.map +1 -0
  77. package/dist/esm/hooks/use-stylesheet.js +8 -0
  78. package/dist/esm/hooks/use-stylesheet.js.map +1 -0
  79. package/dist/esm/hooks/use-url-params.js +31 -0
  80. package/dist/esm/hooks/use-url-params.js.map +1 -0
  81. package/dist/esm/index.js +40 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/is-touch.js +32 -0
  84. package/dist/esm/is-touch.js.map +1 -0
  85. package/dist/esm/media-query/breakpoints.js +29 -0
  86. package/dist/esm/media-query/breakpoints.js.map +1 -0
  87. package/dist/esm/media-query/media-query.js +39 -0
  88. package/dist/esm/media-query/media-query.js.map +1 -0
  89. package/dist/esm/media-query/utils/index.js +35 -0
  90. package/dist/esm/media-query/utils/index.js.map +1 -0
  91. package/dist/esm/raf-throttle.js +24 -0
  92. package/dist/esm/raf-throttle.js.map +1 -0
  93. package/dist/esm/throttle.js +23 -0
  94. package/dist/esm/throttle.js.map +1 -0
  95. package/dist/esm/to-currency.js +26 -0
  96. package/dist/esm/to-currency.js.map +1 -0
  97. package/dist/hooks/use-stylesheet.d.ts +1 -15
  98. package/dist/hooks/use-stylesheet.js +3 -79
  99. package/dist/hooks/use-stylesheet.js.map +1 -1
  100. package/dist/lib/api/http.js +117 -0
  101. package/dist/lib/api/http.js.map +1 -0
  102. package/dist/lib/api/index.js +8 -0
  103. package/dist/lib/api/index.js.map +1 -0
  104. package/dist/lib/api-utilities/api-utilities.js +9 -0
  105. package/dist/lib/api-utilities/api-utilities.js.map +1 -0
  106. package/dist/lib/api-utilities/api-utilities.test.js +122 -0
  107. package/dist/lib/api-utilities/api-utilities.test.js.map +1 -0
  108. package/dist/lib/api-utilities/api-utilities.types.js +1 -0
  109. package/dist/lib/api-utilities/api-utilities.types.js.map +1 -0
  110. package/dist/lib/api-utilities/compose-exclude-string.js +5 -0
  111. package/dist/lib/api-utilities/compose-exclude-string.js.map +1 -0
  112. package/dist/lib/api-utilities/decimal-range/merge-decimal-range.js +12 -0
  113. package/dist/lib/api-utilities/decimal-range/merge-decimal-range.js.map +1 -0
  114. package/dist/lib/api-utilities/decimal-range/merge-specification-range.js +27 -0
  115. package/dist/lib/api-utilities/decimal-range/merge-specification-range.js.map +1 -0
  116. package/dist/lib/api-utilities/district-status.js +13 -0
  117. package/dist/lib/api-utilities/district-status.js.map +1 -0
  118. package/dist/lib/api-utilities/find-filter.js +40 -0
  119. package/dist/lib/api-utilities/find-filter.js.map +1 -0
  120. package/dist/lib/api-utilities/get/coordinates.js +29 -0
  121. package/dist/lib/api-utilities/get/coordinates.js.map +1 -0
  122. package/dist/lib/api-utilities/get/layer-raster.js +3 -0
  123. package/dist/lib/api-utilities/get/layer-raster.js.map +1 -0
  124. package/dist/lib/api-utilities/index.js +2 -0
  125. package/dist/lib/api-utilities/index.js.map +1 -0
  126. package/dist/lib/api-utilities/show-mortgage-price.js +10 -0
  127. package/dist/lib/api-utilities/show-mortgage-price.js.map +1 -0
  128. package/dist/lib/api-utilities/show-price.js +12 -0
  129. package/dist/lib/api-utilities/show-price.js.map +1 -0
  130. package/dist/lib/constants/index.js +5 -0
  131. package/dist/lib/constants/index.js.map +1 -0
  132. package/dist/lib/date.js +10 -0
  133. package/dist/lib/date.js.map +1 -0
  134. package/dist/lib/debounce.js +23 -0
  135. package/dist/lib/debounce.js.map +1 -0
  136. package/dist/lib/dom/dom.js +7 -0
  137. package/dist/lib/dom/dom.js.map +1 -0
  138. package/dist/lib/dom/index.js +2 -0
  139. package/dist/lib/dom/index.js.map +1 -0
  140. package/dist/lib/environment.js +25 -0
  141. package/dist/lib/environment.js.map +1 -0
  142. package/dist/lib/extended-api-models/excluded-properties.js +35 -0
  143. package/dist/lib/extended-api-models/excluded-properties.js.map +1 -0
  144. package/dist/lib/extended-api-models/extended-area-projects.js +10 -0
  145. package/dist/lib/extended-api-models/extended-area-projects.js.map +1 -0
  146. package/dist/lib/extended-api-models/extended-area.js +179 -0
  147. package/dist/lib/extended-api-models/extended-area.js.map +1 -0
  148. package/dist/lib/extended-api-models/index.js +7 -0
  149. package/dist/lib/extended-api-models/index.js.map +1 -0
  150. package/dist/lib/extended-api-models/status/apartment-building-status.js +58 -0
  151. package/dist/lib/extended-api-models/status/apartment-building-status.js.map +1 -0
  152. package/dist/lib/extended-api-models/status/construction-number-status.js +19 -0
  153. package/dist/lib/extended-api-models/status/construction-number-status.js.map +1 -0
  154. package/dist/lib/extended-api-models/status/property-type-status.js +58 -0
  155. package/dist/lib/extended-api-models/status/property-type-status.js.map +1 -0
  156. package/dist/lib/extended-api-models/utilities/apartment-building-view.js +4 -0
  157. package/dist/lib/extended-api-models/utilities/apartment-building-view.js.map +1 -0
  158. package/dist/lib/extended-api-models/utilities/extended-model-price-range.js +35 -0
  159. package/dist/lib/extended-api-models/utilities/extended-model-price-range.js.map +1 -0
  160. package/dist/lib/extended-api-models/utilities/find-extended-object.js +21 -0
  161. package/dist/lib/extended-api-models/utilities/find-extended-object.js.map +1 -0
  162. package/dist/lib/extended-api-models/utilities/is-apartment.js +13 -0
  163. package/dist/lib/extended-api-models/utilities/is-apartment.js.map +1 -0
  164. package/dist/lib/function-is-true.js +11 -0
  165. package/dist/lib/function-is-true.js.map +1 -0
  166. package/dist/lib/generated/bpd-client.js +50 -0
  167. package/dist/lib/generated/bpd-client.js.map +1 -0
  168. package/dist/lib/generated/index.js +2 -0
  169. package/dist/lib/generated/index.js.map +1 -0
  170. package/dist/lib/geometry/country-bounding-box.js +12 -0
  171. package/dist/lib/geometry/country-bounding-box.js.map +1 -0
  172. package/dist/lib/geometry/geometry.js +64 -0
  173. package/dist/lib/geometry/geometry.js.map +1 -0
  174. package/dist/lib/geometry/geometry.test.js +87 -0
  175. package/dist/lib/geometry/geometry.test.js.map +1 -0
  176. package/dist/lib/geometry/index.js +3 -0
  177. package/dist/lib/geometry/index.js.map +1 -0
  178. package/dist/lib/hooks/index.js +11 -0
  179. package/dist/lib/hooks/index.js.map +1 -0
  180. package/dist/lib/hooks/use-click-outside.js +32 -0
  181. package/dist/lib/hooks/use-click-outside.js.map +1 -0
  182. package/dist/lib/hooks/use-delegate-listen.js +10 -0
  183. package/dist/lib/hooks/use-delegate-listen.js.map +1 -0
  184. package/dist/lib/hooks/use-form-changes.js +27 -0
  185. package/dist/lib/hooks/use-form-changes.js.map +1 -0
  186. package/dist/lib/hooks/use-history.js +13 -0
  187. package/dist/lib/hooks/use-history.js.map +1 -0
  188. package/dist/lib/hooks/use-input.js +28 -0
  189. package/dist/lib/hooks/use-input.js.map +1 -0
  190. package/dist/lib/hooks/use-keyboard-focus.js +11 -0
  191. package/dist/lib/hooks/use-keyboard-focus.js.map +1 -0
  192. package/dist/lib/hooks/use-lazy.js +44 -0
  193. package/dist/lib/hooks/use-lazy.js.map +1 -0
  194. package/dist/lib/hooks/use-map-storage.js +14 -0
  195. package/dist/lib/hooks/use-map-storage.js.map +1 -0
  196. package/dist/lib/hooks/use-scroll-position.js +20 -0
  197. package/dist/lib/hooks/use-scroll-position.js.map +1 -0
  198. package/dist/lib/hooks/use-scroll-to.js +64 -0
  199. package/dist/lib/hooks/use-scroll-to.js.map +1 -0
  200. package/dist/lib/hooks/use-stylesheet.js +5 -0
  201. package/dist/lib/hooks/use-stylesheet.js.map +1 -0
  202. package/dist/lib/hooks/use-text.js +16 -0
  203. package/dist/lib/hooks/use-text.js.map +1 -0
  204. package/dist/lib/hooks/use-url-params.js +28 -0
  205. package/dist/lib/hooks/use-url-params.js.map +1 -0
  206. package/dist/lib/index.js +18 -0
  207. package/dist/lib/index.js.map +1 -0
  208. package/dist/lib/is-touch.js +30 -0
  209. package/dist/lib/is-touch.js.map +1 -0
  210. package/dist/lib/media-query/breakpoints.js +27 -0
  211. package/dist/lib/media-query/breakpoints.js.map +1 -0
  212. package/dist/lib/media-query/index.js +2 -0
  213. package/dist/lib/media-query/index.js.map +1 -0
  214. package/dist/lib/media-query/media-query.js +36 -0
  215. package/dist/lib/media-query/media-query.js.map +1 -0
  216. package/dist/lib/media-query/media-query.types.js +1 -0
  217. package/dist/lib/media-query/media-query.types.js.map +1 -0
  218. package/dist/lib/media-query/utils/index.js +32 -0
  219. package/dist/lib/media-query/utils/index.js.map +1 -0
  220. package/dist/lib/raf-throttle.js +22 -0
  221. package/dist/lib/raf-throttle.js.map +1 -0
  222. package/dist/lib/throttle.js +22 -0
  223. package/dist/lib/throttle.js.map +1 -0
  224. package/dist/lib/to-currency.js +24 -0
  225. package/dist/lib/to-currency.js.map +1 -0
  226. package/dist/types/api/http.d.ts +47 -0
  227. package/dist/types/api/index.d.ts +2 -0
  228. package/dist/types/api-utilities/api-utilities.d.ts +8 -0
  229. package/dist/types/api-utilities/api-utilities.test.d.ts +1 -0
  230. package/dist/types/api-utilities/api-utilities.types.d.ts +46 -0
  231. package/dist/types/api-utilities/compose-exclude-string.d.ts +3 -0
  232. package/dist/types/api-utilities/decimal-range/merge-decimal-range.d.ts +3 -0
  233. package/dist/types/api-utilities/decimal-range/merge-specification-range.d.ts +13 -0
  234. package/dist/types/api-utilities/district-status.d.ts +3 -0
  235. package/dist/types/api-utilities/find-filter.d.ts +32 -0
  236. package/dist/types/api-utilities/get/coordinates.d.ts +6 -0
  237. package/dist/types/api-utilities/get/layer-raster.d.ts +3 -0
  238. package/dist/types/api-utilities/index.d.ts +1 -0
  239. package/dist/types/api-utilities/show-mortgage-price.d.ts +3 -0
  240. package/dist/types/api-utilities/show-price.d.ts +7 -0
  241. package/dist/types/constants/index.d.ts +4 -0
  242. package/dist/types/date.d.ts +3 -0
  243. package/dist/types/debounce.d.ts +5 -0
  244. package/dist/types/dom/dom.d.ts +6 -0
  245. package/dist/types/dom/index.d.ts +1 -0
  246. package/dist/types/environment.d.ts +9 -0
  247. package/dist/types/extended-api-models/excluded-properties.d.ts +5 -0
  248. package/dist/types/extended-api-models/extended-area-projects.d.ts +3 -0
  249. package/dist/types/extended-api-models/extended-area.d.ts +13 -0
  250. package/dist/types/extended-api-models/index.d.ts +6 -0
  251. package/dist/types/extended-api-models/status/apartment-building-status.d.ts +3 -0
  252. package/dist/types/extended-api-models/status/construction-number-status.d.ts +3 -0
  253. package/dist/types/extended-api-models/status/property-type-status.d.ts +4 -0
  254. package/dist/types/extended-api-models/utilities/apartment-building-view.d.ts +4 -0
  255. package/dist/types/extended-api-models/utilities/extended-model-price-range.d.ts +4 -0
  256. package/dist/types/extended-api-models/utilities/find-extended-object.d.ts +4 -0
  257. package/dist/types/extended-api-models/utilities/is-apartment.d.ts +11 -0
  258. package/dist/types/function-is-true.d.ts +1 -0
  259. package/dist/types/generated/bpd-client.d.ts +808 -0
  260. package/dist/types/generated/index.d.ts +1 -0
  261. package/dist/types/geometry/country-bounding-box.d.ts +6 -0
  262. package/dist/types/geometry/geometry.d.ts +11 -0
  263. package/dist/types/geometry/geometry.test.d.ts +8 -0
  264. package/dist/types/geometry/index.d.ts +2 -0
  265. package/dist/types/hooks/index.d.ts +10 -0
  266. package/dist/types/hooks/use-click-outside.d.ts +6 -0
  267. package/dist/types/hooks/use-delegate-listen.d.ts +6 -0
  268. package/dist/types/hooks/use-form-changes.d.ts +12 -0
  269. package/dist/types/hooks/use-history.d.ts +4 -0
  270. package/dist/types/hooks/use-input.d.ts +41 -0
  271. package/dist/types/hooks/use-keyboard-focus.d.ts +6 -0
  272. package/dist/types/hooks/use-lazy.d.ts +21 -0
  273. package/dist/types/hooks/use-map-storage.d.ts +6 -0
  274. package/dist/types/hooks/use-scroll-position.d.ts +10 -0
  275. package/dist/types/hooks/use-scroll-to.d.ts +8 -0
  276. package/dist/types/hooks/use-stylesheet.d.ts +1 -0
  277. package/dist/types/hooks/use-text.d.ts +1 -0
  278. package/dist/types/hooks/use-url-params.d.ts +5 -0
  279. package/dist/types/index.d.ts +17 -0
  280. package/dist/types/is-touch.d.ts +8 -0
  281. package/dist/types/media-query/breakpoints.d.ts +26 -0
  282. package/dist/types/media-query/index.d.ts +1 -0
  283. package/dist/types/media-query/media-query.d.ts +13 -0
  284. package/dist/types/media-query/media-query.types.d.ts +14 -0
  285. package/dist/types/media-query/utils/index.d.ts +3 -0
  286. package/dist/types/raf-throttle.d.ts +4 -0
  287. package/dist/types/throttle.d.ts +2 -0
  288. package/dist/types/to-currency.d.ts +3 -0
  289. package/package.json +3 -3
  290. package/coverage/base.css +0 -224
  291. package/coverage/block-navigation.js +0 -79
  292. package/coverage/index.html +0 -95
  293. package/coverage/lcov.info +0 -0
  294. package/coverage/prettify.css +0 -1
  295. package/coverage/prettify.js +0 -2
  296. package/coverage/sort-arrow-sprite.png +0 -0
  297. package/coverage/sorter.js +0 -170
  298. package/yarn-error.log +0 -8117
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,32 @@
1
+ const IS_TOUCH = 'is-touch';
2
+ const WITH_MOUSE = `${IS_TOUCH}--with-mouse`;
3
+ const html = document.documentElement;
4
+ class DetectTouch {
5
+ constructor() {
6
+ this.hasMouse = false;
7
+ this.touch =
8
+ 'ontouchstart' in html ||
9
+ navigator.maxTouchPoints > 0 ||
10
+ navigator.msMaxTouchPoints > 0;
11
+ html.addEventListener('touchstart', () => {
12
+ html.removeEventListener('mousemove', () => this.handleMouseEvent());
13
+ });
14
+ html.addEventListener('mousemove', () => this.handleMouseEvent());
15
+ if (this.touch) {
16
+ html.classList.add(IS_TOUCH);
17
+ }
18
+ }
19
+ get isTouchDevice() {
20
+ return this.touch;
21
+ }
22
+ handleMouseEvent() {
23
+ if (!this.hasMouse && html.classList.contains(IS_TOUCH)) {
24
+ html.classList.add(WITH_MOUSE);
25
+ this.hasMouse = true;
26
+ }
27
+ }
28
+ }
29
+ const detectTouch = new DetectTouch();
30
+
31
+ export { DetectTouch, detectTouch };
32
+ //# sourceMappingURL=is-touch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-touch.js","sources":["../../src/is-touch.ts"],"sourcesContent":["const IS_TOUCH = 'is-touch';\nconst WITH_MOUSE = `${IS_TOUCH}--with-mouse`;\nconst html = document.documentElement;\n\nexport class DetectTouch {\n touch: boolean;\n hasMouse: boolean;\n\n get isTouchDevice() {\n return this.touch;\n }\n\n constructor() {\n this.hasMouse = false;\n this.touch =\n 'ontouchstart' in html ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0;\n\n html.addEventListener('touchstart', () => {\n html.removeEventListener('mousemove', () => this.handleMouseEvent());\n });\n\n html.addEventListener('mousemove', () => this.handleMouseEvent());\n\n if (this.touch) {\n html.classList.add(IS_TOUCH);\n }\n }\n\n handleMouseEvent() {\n if (!this.hasMouse && html.classList.contains(IS_TOUCH)) {\n html.classList.add(WITH_MOUSE);\n this.hasMouse = true;\n }\n }\n}\n\nexport const detectTouch = new DetectTouch();\n"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,UAAU,CAAC;AAC5B,MAAM,UAAU,GAAG,GAAG,QAAQ,cAAc,CAAC;AAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;MAEzB,WAAW;IAQpB;QACI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,KAAK;YACN,cAAc,IAAI,IAAI;gBACtB,SAAS,CAAC,cAAc,GAAG,CAAC;gBAC5B,SAAS,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACxE,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAElE,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAChC;KACJ;IApBD,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAoBD,gBAAgB;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACxB;KACJ;CACJ;MAEY,WAAW,GAAG,IAAI,WAAW;;;;"}
@@ -0,0 +1,29 @@
1
+ const breakpoints = {
2
+ mobile: {
3
+ size: 320,
4
+ active: false,
5
+ },
6
+ mobilePlus: {
7
+ size: 480,
8
+ active: false,
9
+ },
10
+ tabletPortrait: {
11
+ size: 768,
12
+ active: false,
13
+ },
14
+ tabletLandscape: {
15
+ size: 1024,
16
+ active: false,
17
+ },
18
+ laptop: {
19
+ size: 1260,
20
+ active: false,
21
+ },
22
+ desktop: {
23
+ size: 1600,
24
+ active: false,
25
+ },
26
+ };
27
+
28
+ export { breakpoints };
29
+ //# sourceMappingURL=breakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.js","sources":["../../../src/media-query/breakpoints.ts"],"sourcesContent":["export const breakpoints = {\n mobile: {\n size: 320,\n active: false,\n },\n mobilePlus: {\n size: 480,\n active: false,\n },\n tabletPortrait: {\n size: 768,\n active: false,\n },\n tabletLandscape: {\n size: 1024,\n active: false,\n },\n laptop: {\n size: 1260,\n active: false,\n },\n desktop: {\n size: 1600,\n active: false,\n },\n};\n"],"names":[],"mappings":"MAAa,WAAW,GAAG;IACvB,MAAM,EAAE;QACJ,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,KAAK;KAChB;IACD,UAAU,EAAE;QACR,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,KAAK;KAChB;IACD,cAAc,EAAE;QACZ,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,KAAK;KAChB;IACD,eAAe,EAAE;QACb,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK;KAChB;IACD,MAAM,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK;KAChB;IACD,OAAO,EAAE;QACL,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK;KAChB;;;;;"}
@@ -0,0 +1,39 @@
1
+ import { breakpoints } from './breakpoints.js';
2
+ export { breakpoints } from './breakpoints.js';
3
+ import { getSizeFromBreakpoint, getMediaQueries } from './utils/index.js';
4
+
5
+ const max = (breakpoint) => `(max-width: ${getSizeFromBreakpoint(breakpoint)}px)`;
6
+ const min = (breakpoint) => `(min-width: ${getSizeFromBreakpoint(breakpoint)}px)`;
7
+ const mediaIsMatch = (breakpoint) => window.matchMedia(breakpoint).matches;
8
+ const deviceWidth = {
9
+ isMobilePlusAndSmaller: mediaIsMatch(`${min('mobile')} and ${max('mobilePlus')}`),
10
+ isTabletPortraitAndSmaller: mediaIsMatch(`${min('mobile')} and ${max('tabletPortrait')}`),
11
+ };
12
+ const mediaWatcher = (mediaQuery, layoutChangedCallback) => {
13
+ const mediaQueryListener = window.matchMedia(mediaQuery);
14
+ mediaQueryListener.addListener((e) => layoutChangedCallback(e.matches));
15
+ layoutChangedCallback(mediaQueryListener.matches);
16
+ };
17
+ const getCurrentBreakpoint = () => getMediaQueries().reduce((previous, current) => window.matchMedia(current.query()).matches ? current.breakpoint : previous, undefined);
18
+ const useMedia = (callback) => {
19
+ const breakpointObject = getMediaQueries();
20
+ breakpointObject
21
+ .map((breakpoint) => {
22
+ return {
23
+ listener: window.matchMedia(breakpoint.query()),
24
+ breakpoint: breakpoint.breakpoint,
25
+ };
26
+ })
27
+ .forEach((breakpoint) => breakpoint.listener.addListener((e) => handleMediaListeners(e, breakpoint.breakpoint)));
28
+ function handleMediaListeners(event, key) {
29
+ if (!event.matches)
30
+ return;
31
+ Object.keys(breakpoints).forEach((item) => (breakpoints[item].active =
32
+ item === key ? event.matches : !event.matches));
33
+ callback(breakpoints);
34
+ }
35
+ callback(breakpoints);
36
+ };
37
+
38
+ export { deviceWidth, getCurrentBreakpoint, max, mediaIsMatch, mediaWatcher, min, useMedia };
39
+ //# sourceMappingURL=media-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-query.js","sources":["../../../src/media-query/media-query.ts"],"sourcesContent":["import { breakpoints } from './breakpoints';\nimport { BreakpointFunction, Breakpoints, UseMediaFunction } from './media-query.types';\nimport { getMediaQueries, getSizeFromBreakpoint } from './utils';\n\nconst max: BreakpointFunction = (breakpoint) =>\n `(max-width: ${getSizeFromBreakpoint(breakpoint)}px)`;\n\nconst min: BreakpointFunction = (breakpoint) =>\n `(min-width: ${getSizeFromBreakpoint(breakpoint)}px)`;\n\n/**\n * Check if the given breakpoint is a match\n * @param breakpoint { string }\n */\nexport const mediaIsMatch = (breakpoint: string) => window.matchMedia(breakpoint).matches;\n\nexport const deviceWidth = {\n isMobilePlusAndSmaller: mediaIsMatch(`${min('mobile')} and ${max('mobilePlus')}`),\n isTabletPortraitAndSmaller: mediaIsMatch(`${min('mobile')} and ${max('tabletPortrait')}`),\n};\n\n/**\n * Method that calls a callback everytime a media-query matches\n * mediaWatcher(`(min-width: 600px)`, (matches) => {\n * console.log(matches);\n * });\n * @function mediaWatcher\n * @param mediaQuery { string }\n * @param layoutChangedCallback { callback }\n */\nconst mediaWatcher = (\n mediaQuery: string,\n layoutChangedCallback: (mediaQueryMatches: boolean) => void,\n) => {\n const mediaQueryListener = window.matchMedia(mediaQuery);\n mediaQueryListener.addListener((e) => layoutChangedCallback(e.matches));\n layoutChangedCallback(mediaQueryListener.matches);\n};\n\n/**\n * Returns current active breakpoint\n * @function getCurrentBreakpoint\n */\nconst getCurrentBreakpoint = () =>\n getMediaQueries().reduce(\n (previous, current) =>\n window.matchMedia(current.query()).matches ? current.breakpoint : (previous as any),\n undefined,\n );\n\n/**\n * Returns the breakpoints object in the given callback\n * @function useMedia\n * @param callback returns @type Breakpoints\n */\nconst useMedia = (callback: UseMediaFunction) => {\n const breakpointObject = getMediaQueries();\n\n breakpointObject\n .map((breakpoint) => {\n return {\n listener: window.matchMedia(breakpoint.query()),\n breakpoint: breakpoint.breakpoint,\n };\n })\n .forEach((breakpoint) =>\n breakpoint.listener.addListener((e) => handleMediaListeners(e, breakpoint.breakpoint)),\n );\n\n function handleMediaListeners(event: { matches: boolean; media: string }, key: Breakpoints) {\n if (!event.matches) return;\n\n Object.keys(breakpoints).forEach(\n (item: any) =>\n (breakpoints[item as Breakpoints].active =\n item === key ? event.matches : !event.matches),\n );\n\n callback(breakpoints);\n }\n\n callback(breakpoints);\n};\n\nexport { breakpoints, min, max, useMedia, mediaWatcher, getCurrentBreakpoint, Breakpoints };\n"],"names":[],"mappings":";;;;MAIM,GAAG,GAAuB,CAAC,UAAU,KACvC,eAAe,qBAAqB,CAAC,UAAU,CAAC,MAAM;MAEpD,GAAG,GAAuB,CAAC,UAAU,KACvC,eAAe,qBAAqB,CAAC,UAAU,CAAC,MAAM;MAM7C,YAAY,GAAG,CAAC,UAAkB,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ;MAE7E,WAAW,GAAG;IACvB,sBAAsB,EAAE,YAAY,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;IACjF,0BAA0B,EAAE,YAAY,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;EAC3F;MAWI,YAAY,GAAG,CACjB,UAAkB,EAClB,qBAA2D;IAE3D,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzD,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,qBAAqB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACtD,EAAE;MAMI,oBAAoB,GAAG,MACzB,eAAe,EAAE,CAAC,MAAM,CACpB,CAAC,QAAQ,EAAE,OAAO,KACd,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,GAAI,QAAgB,EACvF,SAAS,EACX;MAOA,QAAQ,GAAG,CAAC,QAA0B;IACxC,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC;IAE3C,gBAAgB;SACX,GAAG,CAAC,CAAC,UAAU;QACZ,OAAO;YACH,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC/C,UAAU,EAAE,UAAU,CAAC,UAAU;SACpC,CAAC;KACL,CAAC;SACD,OAAO,CAAC,CAAC,UAAU,KAChB,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CACzF,CAAC;IAEN,SAAS,oBAAoB,CAAC,KAA0C,EAAE,GAAgB;QACtF,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAE3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAC5B,CAAC,IAAS,MACL,WAAW,CAAC,IAAmB,CAAC,CAAC,MAAM;YACpC,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CACzD,CAAC;QAEF,QAAQ,CAAC,WAAW,CAAC,CAAC;KACzB;IAED,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1B;;;;"}
@@ -0,0 +1,35 @@
1
+ import { breakpoints } from '../breakpoints.js';
2
+
3
+ function getSizeFromBreakpoint(breakpointValue) {
4
+ if (breakpoints[breakpointValue].size) {
5
+ return breakpoints[breakpointValue].size;
6
+ }
7
+ else {
8
+ console.error('No valid breakpoint or size specified for media.');
9
+ return '0';
10
+ }
11
+ }
12
+ function getMediaQueries() {
13
+ const breakpointMap = Object.keys(breakpoints);
14
+ return breakpointMap.map((item, index) => {
15
+ const breakpoint = breakpoints[item];
16
+ const breakpointAbove = breakpoints[breakpointMap[index + 1]];
17
+ return {
18
+ breakpoint: item,
19
+ query: () => {
20
+ if (index === 0) {
21
+ return `(max-width: ${breakpointAbove.size - 1}px)`;
22
+ }
23
+ else if (index === breakpointMap.length - 1) {
24
+ return `(min-width: ${breakpoint.size}px)`;
25
+ }
26
+ else {
27
+ return `(max-width: ${breakpointAbove.size - 1}px) and (min-width: ${breakpoint.size}px)`;
28
+ }
29
+ },
30
+ };
31
+ });
32
+ }
33
+
34
+ export { getMediaQueries, getSizeFromBreakpoint };
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/media-query/utils/index.ts"],"sourcesContent":["import { breakpoints } from '../breakpoints';\nimport { Breakpoints, MediaQuery } from '../media-query.types';\n\nexport function getSizeFromBreakpoint(breakpointValue: Breakpoints) {\n if (breakpoints[breakpointValue].size) {\n return breakpoints[breakpointValue].size;\n } else {\n console.error('No valid breakpoint or size specified for media.');\n return '0';\n }\n}\n\nexport function getMediaQueries(): MediaQuery[] {\n const breakpointMap = Object.keys(breakpoints);\n\n return breakpointMap.map((item: any, index: number) => {\n const breakpoint = breakpoints[item as Breakpoints];\n const breakpointAbove = breakpoints[breakpointMap[index + 1] as Breakpoints];\n\n return {\n breakpoint: item,\n query: () => {\n if (index === 0) {\n return `(max-width: ${breakpointAbove.size - 1}px)`;\n } else if (index === breakpointMap.length - 1) {\n return `(min-width: ${breakpoint.size}px)`;\n } else {\n return `(max-width: ${breakpointAbove.size - 1}px) and (min-width: ${\n breakpoint.size\n }px)`;\n }\n },\n };\n });\n}\n"],"names":[],"mappings":";;SAGgB,qBAAqB,CAAC,eAA4B;IAC9D,IAAI,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE;QACnC,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC;KAC5C;SAAM;QACH,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;KACd;AACL,CAAC;SAEe,eAAe;IAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/C,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,KAAa;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAmB,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAgB,CAAC,CAAC;QAE7E,OAAO;YACH,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE;gBACH,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,OAAO,eAAe,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;iBACvD;qBAAM,IAAI,KAAK,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC3C,OAAO,eAAe,UAAU,CAAC,IAAI,KAAK,CAAC;iBAC9C;qBAAM;oBACH,OAAO,eAAe,eAAe,CAAC,IAAI,GAAG,CAAC,uBAC1C,UAAU,CAAC,IACf,KAAK,CAAC;iBACT;aACJ;SACJ,CAAC;KACL,CAAC,CAAC;AACP;;;;"}
@@ -0,0 +1,24 @@
1
+ const rafThrottle = (callback) => {
2
+ let requestId = null;
3
+ let lastArgs = null;
4
+ const wrapperFunction = (...args) => {
5
+ lastArgs = args;
6
+ if (requestId) {
7
+ return;
8
+ }
9
+ requestId = requestAnimationFrame(() => {
10
+ requestId = null;
11
+ callback(...lastArgs);
12
+ });
13
+ };
14
+ wrapperFunction.cancel = () => {
15
+ if (requestId !== null) {
16
+ cancelAnimationFrame(requestId);
17
+ requestId = null;
18
+ }
19
+ };
20
+ return wrapperFunction;
21
+ };
22
+
23
+ export { rafThrottle };
24
+ //# sourceMappingURL=raf-throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raf-throttle.js","sources":["../../src/raf-throttle.ts"],"sourcesContent":["export const rafThrottle = (callback: (...args: any[]) => void) => {\n let requestId: null | number = null;\n\n let lastArgs: any = null;\n\n const wrapperFunction = (...args: any[]) => {\n // Always capture the latest value\n lastArgs = args;\n\n // There is already a frame queued\n if (requestId) {\n return;\n }\n\n // Schedule a new frame\n requestId = requestAnimationFrame(() => {\n requestId = null;\n callback(...lastArgs);\n });\n };\n\n wrapperFunction.cancel = () => {\n if (requestId !== null) {\n cancelAnimationFrame(requestId);\n requestId = null;\n }\n };\n\n return wrapperFunction;\n};\n"],"names":[],"mappings":"MAAa,WAAW,GAAG,CAAC,QAAkC;IAC1D,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,IAAI,QAAQ,GAAQ,IAAI,CAAC;IAEzB,MAAM,eAAe,GAAG,CAAC,GAAG,IAAW;QAEnC,QAAQ,GAAG,IAAI,CAAC;QAGhB,IAAI,SAAS,EAAE;YACX,OAAO;SACV;QAGD,SAAS,GAAG,qBAAqB,CAAC;YAC9B,SAAS,GAAG,IAAI,CAAC;YACjB,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;SACzB,CAAC,CAAC;KACN,CAAC;IAEF,eAAe,CAAC,MAAM,GAAG;QACrB,IAAI,SAAS,KAAK,IAAI,EAAE;YACpB,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAChC,SAAS,GAAG,IAAI,CAAC;SACpB;KACJ,CAAC;IAEF,OAAO,eAAe,CAAC;AAC3B;;;;"}
@@ -0,0 +1,23 @@
1
+ const throttle = (fn, wait = 300) => {
2
+ let inThrottle, lastFn, lastTime;
3
+ return function () {
4
+ const context = this, args = arguments;
5
+ if (!inThrottle) {
6
+ fn.apply(context, args);
7
+ lastTime = Date.now();
8
+ inThrottle = true;
9
+ }
10
+ else {
11
+ clearTimeout(lastFn);
12
+ lastFn = setTimeout(() => {
13
+ if (Date.now() - lastTime >= wait) {
14
+ fn.apply(context, args);
15
+ lastTime = Date.now();
16
+ }
17
+ }, Math.max(wait - (Date.now() - lastTime), 0));
18
+ }
19
+ };
20
+ };
21
+
22
+ export { throttle };
23
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sources":["../../src/throttle.ts"],"sourcesContent":["const throttle = (fn: Function, wait: number = 300) => {\n let inThrottle: boolean, lastFn: ReturnType<typeof setTimeout>, lastTime: number;\n\n return function (this: any) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const context = this,\n // eslint-disable-next-line prefer-rest-params\n args = arguments;\n if (!inThrottle) {\n fn.apply(context, args);\n lastTime = Date.now();\n inThrottle = true;\n } else {\n clearTimeout(lastFn);\n lastFn = setTimeout(() => {\n if (Date.now() - lastTime >= wait) {\n fn.apply(context, args);\n lastTime = Date.now();\n }\n }, Math.max(wait - (Date.now() - lastTime), 0));\n }\n };\n};\n\nexport { throttle };\n"],"names":[],"mappings":"MAAM,QAAQ,GAAG,CAAC,EAAY,EAAE,OAAe,GAAG;IAC9C,IAAI,UAAmB,EAAE,MAAqC,EAAE,QAAgB,CAAC;IAEjF,OAAO;QAEH,MAAM,OAAO,GAAG,IAAI,EAEhB,IAAI,GAAG,SAAS,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE;YACb,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACxB,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC;SACrB;aAAM;YACH,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,GAAG,UAAU,CAAC;gBAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,IAAI,EAAE;oBAC/B,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACxB,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;iBACzB;aACJ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACnD;KACJ,CAAC;AACN;;;;"}
@@ -0,0 +1,26 @@
1
+ const round = (value, decimals) => Number(Math.round(value + 'e' + decimals) + 'e-' + decimals).toFixed(decimals);
2
+ const putThousandsSeparators = (value, sep) => {
3
+ let transformedValue = null;
4
+ if (sep == null) {
5
+ sep = '.';
6
+ }
7
+ if (value.toString() === value.toLocaleString()) {
8
+ const parts = value.toString().split(',');
9
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, sep);
10
+ transformedValue = parts[1] ? parts.join(',') : parts[0];
11
+ }
12
+ else {
13
+ transformedValue = value.toLocaleString();
14
+ }
15
+ return transformedValue;
16
+ };
17
+ const toCurrency = (value, decimals = 2) => {
18
+ let transformedValue = null;
19
+ transformedValue = round(Number(value), decimals);
20
+ transformedValue = `${value.toString().replace('.', ',')}`;
21
+ transformedValue = putThousandsSeparators(value);
22
+ return `€ ${transformedValue}`;
23
+ };
24
+
25
+ export { putThousandsSeparators, round, toCurrency };
26
+ //# sourceMappingURL=to-currency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-currency.js","sources":["../../src/to-currency.ts"],"sourcesContent":["export const round = (value: number, decimals: number) =>\n Number(Math.round(value + ('e' as any) + decimals) + 'e-' + decimals).toFixed(decimals);\n\nexport const putThousandsSeparators = (value: number | string, sep?: string) => {\n let transformedValue = null;\n\n if (sep == null) {\n sep = '.';\n }\n\n // check if it needs formatting\n if (value.toString() === value.toLocaleString()) {\n // split decimals\n const parts = value.toString().split(',');\n\n // format whole numbers\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, sep);\n\n // put them back together\n transformedValue = parts[1] ? parts.join(',') : parts[0];\n } else {\n transformedValue = value.toLocaleString();\n }\n\n return transformedValue;\n};\n\nexport const toCurrency = (value: number, decimals = 2) => {\n let transformedValue = null;\n\n transformedValue = round(Number(value), decimals);\n transformedValue = `${value.toString().replace('.', ',')}`;\n transformedValue = putThousandsSeparators(value);\n\n return `€ ${transformedValue}`;\n};\n"],"names":[],"mappings":"MAAa,KAAK,GAAG,CAAC,KAAa,EAAE,QAAgB,KACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAI,GAAW,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;MAE/E,sBAAsB,GAAG,CAAC,KAAsB,EAAE,GAAY;IACvE,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAE5B,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,GAAG,GAAG,GAAG,CAAC;KACb;IAGD,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,cAAc,EAAE,EAAE;QAE7C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAG1C,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAG1D,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KAC5D;SAAM;QACH,gBAAgB,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;KAC7C;IAED,OAAO,gBAAgB,CAAC;AAC5B,EAAE;MAEW,UAAU,GAAG,CAAC,KAAa,EAAE,QAAQ,GAAG,CAAC;IAClD,IAAI,gBAAgB,GAAG,IAAI,CAAC;IAE5B,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClD,gBAAgB,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC3D,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,KAAK,gBAAgB,EAAE,CAAC;AACnC;;;;"}
@@ -1,15 +1 @@
1
- declare global {
2
- interface Window {
3
- ShadyCSS: any;
4
- }
5
- interface ShadowRoot {
6
- adoptedStyleSheets: CSSStyleSheet[];
7
- }
8
- interface Document {
9
- adoptedStyleSheets: CSSStyleSheet[];
10
- }
11
- interface CSSStyleSheet {
12
- replaceSync(cssText: string): void;
13
- }
14
- }
15
- export declare const useStylesheet: (style: string) => void;
1
+ export declare function useStylesheet(style: string): void;
@@ -1,81 +1,5 @@
1
- import { createHook } from '@atomify/hooks';
2
- const supportShadyCSS = window.ShadyCSS && !window.ShadyCSS.nativeShadow;
3
- const CSS_SAVE_TOKEN = Symbol('atomify.cssSaveToken');
4
- const styleCache = new Map();
5
- const APPLIED_STYLES = [];
6
- const supportsAdoptingStyleSheets = () => 'adoptedStyleSheets' in Document.prototype && 'replace' in CSSStyleSheet.prototype;
7
- function bindShadyRoot(target, template) {
8
- window.ShadyCSS.prepareTemplate(template, target.$cmpMeta$.$tagName$);
9
- window.ShadyCSS.styleElement(target);
1
+ import { unsafeCSS, useStyles } from '@atomify/hooks';
2
+ export function useStylesheet(style) {
3
+ useStyles(() => unsafeCSS(style));
10
4
  }
11
- const applyShadowdomStyles = (component, styles) => {
12
- const container = component.container;
13
- const componentName = component.$cmpMeta$.$tagName$;
14
- let styleTmp;
15
- if (!styleCache.has(componentName)) {
16
- styleTmp = document.createElement('template');
17
- styleTmp.innerHTML = `${component.hasShadowDom && !supportsAdoptingStyleSheets() && styles
18
- ? `<style style-hook>${styles}</style>`
19
- : ''}`;
20
- }
21
- else {
22
- styleTmp = styleCache.get(componentName);
23
- }
24
- if (styleTmp) {
25
- if (supportShadyCSS && component.hasShadowDom) {
26
- bindShadyRoot(component, styleTmp);
27
- }
28
- container.appendChild(document.importNode(styleTmp.content, true));
29
- }
30
- };
31
- const unsafeCSS = (cssString) => createCSSResult(String(cssString), CSS_SAVE_TOKEN);
32
- const createCSSResult = (css, token) => {
33
- if (token !== CSS_SAVE_TOKEN)
34
- throw new Error(`${css} is not supported. Use 'unsafeCSS' if you want to use: ${css}`);
35
- let styleSheet = null;
36
- const cssText = css;
37
- if (supportsAdoptingStyleSheets()) {
38
- styleSheet = new CSSStyleSheet();
39
- styleSheet.replaceSync(cssText);
40
- }
41
- return {
42
- cssText,
43
- styleSheet,
44
- };
45
- };
46
- const adoptStyles = (root, styles) => {
47
- const hasShadowDom = root.hasShadowDom;
48
- const componentName = root.$cmpMeta$.$tagName$;
49
- if (supportsAdoptingStyleSheets() && hasShadowDom) {
50
- const CSSRoot = root.container;
51
- if (!(CSSRoot instanceof HTMLElement))
52
- CSSRoot.adoptedStyleSheets = styles.map((s) => {
53
- return s instanceof StyleSheet ? s : s.styleSheet;
54
- });
55
- }
56
- else if (APPLIED_STYLES.indexOf(componentName) === -1) {
57
- const combinedStyleArray = styles
58
- .map((style) => ('cssText' in style ? style.cssText : null))
59
- .join('');
60
- if (hasShadowDom) {
61
- root.styles = combinedStyleArray;
62
- applyShadowdomStyles(root, combinedStyleArray);
63
- }
64
- else {
65
- const styleElement = document.createElement('style');
66
- styleElement.textContent = combinedStyleArray;
67
- styleElement.setAttribute('scope', componentName);
68
- document.head.appendChild(styleElement);
69
- APPLIED_STYLES.push(componentName);
70
- }
71
- }
72
- };
73
- export const useStylesheet = (style) => {
74
- const css = unsafeCSS(style);
75
- const styles = Array.isArray(css) ? [...css] : [css];
76
- return createHook({
77
- onDidLoad: (element) => adoptStyles(element, styles),
78
- onUpdate: (element) => adoptStyles(element, styles),
79
- });
80
- };
81
5
  //# sourceMappingURL=use-stylesheet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-stylesheet.js","sourceRoot":"","sources":["../../src/hooks/use-stylesheet.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, createHook } from '@atomify/hooks';\n\ndeclare global {\n interface Window {\n ShadyCSS: any;\n }\n interface ShadowRoot {\n adoptedStyleSheets: CSSStyleSheet[];\n }\n\n interface Document {\n adoptedStyleSheets: CSSStyleSheet[];\n }\n\n interface CSSStyleSheet {\n replaceSync(cssText: string): void;\n }\n}\n\ninterface CSSResult {\n cssText: string;\n styleSheet: CSSStyleSheet | null;\n}\n\ntype CSSResultOrNative = CSSResult | CSSStyleSheet;\n\nconst supportShadyCSS = window.ShadyCSS && !window.ShadyCSS.nativeShadow;\nconst CSS_SAVE_TOKEN = Symbol('atomify.cssSaveToken');\nconst styleCache = new Map<string, HTMLTemplateElement>();\nconst APPLIED_STYLES: string[] = [];\n\n/**\n * Checks if adopting stylesheet is supported.\n */\nconst supportsAdoptingStyleSheets = () =>\n 'adoptedStyleSheets' in Document.prototype && 'replace' in CSSStyleSheet.prototype;\n\n/**\n * Generates a template based necessary fallbacks needed for browsers that do not support Custom elements or ShadowDom\n * Reference: https://github.com/webcomponents/webcomponentsjs\n * @param {Component} target\n * @param {HTMLTemplateElement} template\n */\nfunction bindShadyRoot(target: Component, template: HTMLTemplateElement) {\n window.ShadyCSS.prepareTemplate(template, target.$cmpMeta$.$tagName$);\n window.ShadyCSS.styleElement(target);\n}\n\nconst applyShadowdomStyles = (component: Component, styles: string) => {\n const container = component.container;\n const componentName = component.$cmpMeta$.$tagName$;\n let styleTmp: HTMLTemplateElement | undefined;\n\n if (!styleCache.has(componentName)) {\n styleTmp = document.createElement('template');\n\n styleTmp.innerHTML = `${\n component.hasShadowDom && !supportsAdoptingStyleSheets() && styles\n ? `<style style-hook>${styles}</style>`\n : ''\n }`;\n } else {\n styleTmp = styleCache.get(componentName);\n }\n\n if (styleTmp) {\n // Apply polyfill when shady polyfill is available and the component has shadowdom\n if (supportShadyCSS && component.hasShadowDom) {\n bindShadyRoot(component, styleTmp);\n }\n\n container.appendChild(document.importNode(styleTmp.content, true));\n }\n};\n\n/**\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n * @param {string} css\n * @returns {StyleObject}\n */\nconst unsafeCSS = (cssString: unknown): CSSResult =>\n createCSSResult(String(cssString), CSS_SAVE_TOKEN);\n\n/**\n * @param {string} css\n * @param {symbol} token\n * @returns {({ cssText: string; styleSheet: CSSStyleSheet | null })}\n */\nconst createCSSResult = (\n css: string,\n token: symbol,\n): { cssText: string; styleSheet: CSSStyleSheet | null } => {\n if (token !== CSS_SAVE_TOKEN)\n throw new Error(`${css} is not supported. Use 'unsafeCSS' if you want to use: ${css}`);\n\n let styleSheet: CSSStyleSheet | null = null;\n const cssText = css;\n\n if (supportsAdoptingStyleSheets()) {\n styleSheet = new CSSStyleSheet();\n styleSheet.replaceSync(cssText);\n }\n\n return {\n cssText,\n styleSheet,\n };\n};\n\n/**\n * Applies adoptedStyleSheets to the Atomify component.\n * @param { Component } root\n * @param { StyleObject } css\n */\nconst adoptStyles = (root: Component, styles: Array<CSSResultOrNative>) => {\n const hasShadowDom = root.hasShadowDom;\n const componentName = root.$cmpMeta$.$tagName$;\n\n // Add addopted stylesheets when it is supported\n if (supportsAdoptingStyleSheets() && hasShadowDom) {\n const CSSRoot = root.container;\n if (!(CSSRoot instanceof HTMLElement))\n CSSRoot.adoptedStyleSheets = styles.map((s) => {\n return s instanceof StyleSheet ? s : s.styleSheet!;\n });\n } else if (APPLIED_STYLES.indexOf(componentName) === -1) {\n const combinedStyleArray = styles\n .map((style) => ('cssText' in style ? style.cssText : null))\n .join('');\n\n // When adopted stylesheet is not supported but shadowdom is apply it to the shadowroot.\n // Else it is being applied to the head.\n if (hasShadowDom) {\n // Cache the styles so it can be reused instead of creating a style tag again.\n root.styles = combinedStyleArray;\n applyShadowdomStyles(root, combinedStyleArray);\n } else {\n const styleElement = document.createElement('style');\n styleElement.textContent = combinedStyleArray;\n styleElement.setAttribute('scope', componentName);\n\n document.head.appendChild(styleElement);\n APPLIED_STYLES.push(componentName);\n }\n }\n};\n\nexport const useStylesheet = (style: string) => {\n const css = unsafeCSS(style);\n const styles = Array.isArray(css) ? [...css] : [css];\n\n return createHook({\n onDidLoad: (element) => adoptStyles(element, styles),\n onUpdate: (element) => adoptStyles(element, styles),\n });\n};\n"]}
1
+ {"version":3,"file":"use-stylesheet.js","sourceRoot":"","sources":["../../src/hooks/use-stylesheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMtD,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { unsafeCSS, useStyles } from '@atomify/hooks';\n/**\n * Add styling through imported css files (Webpack)\n * @export\n * @param {string} style\n */\nexport function useStylesheet(style: string) {\n useStyles(() => unsafeCSS(style));\n}\n"]}
@@ -0,0 +1,117 @@
1
+ import qs from 'qs';
2
+ export class HttpError extends Error {
3
+ constructor(input) {
4
+ super(input.message);
5
+ this.response = input.response;
6
+ this.statusCode = input.statusCode;
7
+ this.body = input.body;
8
+ this.name = 'HttpError';
9
+ }
10
+ }
11
+ export class HttpClient {
12
+ constructor(config = {}) {
13
+ this.defaultConfig = {
14
+ returnType: 'json',
15
+ };
16
+ this.config = {};
17
+ this.get = this.createRequest('GET');
18
+ this.post = this.createRequest('POST');
19
+ this.put = this.createRequest('PUT');
20
+ this.patch = this.createRequest('PATCH');
21
+ this.delete = this.createRequest('DELETE');
22
+ this.setToken = (token) => (this.token = token);
23
+ this.setAbortController = (config) => {
24
+ const { createAbort } = config;
25
+ if (createAbort) {
26
+ if (typeof AbortController !== undefined) {
27
+ const controller = new AbortController();
28
+ const { signal } = controller;
29
+ config.signal = signal;
30
+ createAbort(controller.abort.bind(controller));
31
+ }
32
+ else {
33
+ createAbort(() => console.log('The AbortController api isnt available in your browser'));
34
+ }
35
+ }
36
+ };
37
+ this.config = Object.assign(Object.assign({}, this.defaultConfig), config);
38
+ }
39
+ createRequest(method) {
40
+ return (url, data, config) => {
41
+ if (method === 'GET') {
42
+ let getUrl = url;
43
+ if (data) {
44
+ getUrl = url + '?' + qs.stringify(data);
45
+ }
46
+ return this.request(getUrl, Object.assign(Object.assign({}, config), { method: 'GET' }));
47
+ }
48
+ const contentType = config && config.headers && config.headers['Content-Type'];
49
+ return this.request(url, Object.assign(Object.assign({}, config), { method, body: this.createBody(data, contentType) }));
50
+ };
51
+ }
52
+ setAuthenticationHeaders(config) {
53
+ if (this.token) {
54
+ config.headers = Object.assign(Object.assign({}, config.headers), { Authorization: `Bearer ${this.token}` });
55
+ }
56
+ }
57
+ async request(url, requestConfig = {}) {
58
+ const { beforeHook } = this.config;
59
+ const config = Object.assign(Object.assign({}, this.config), requestConfig);
60
+ const { baseUrl = '' } = config;
61
+ this.setAbortController(config);
62
+ if (beforeHook) {
63
+ await beforeHook(this);
64
+ }
65
+ this.setAuthenticationHeaders(config);
66
+ const requestFn = fetch(baseUrl + url, config)
67
+ .then(this.handleError)
68
+ .then(res => this.handleSuccess(res, config));
69
+ return requestFn.catch(err => this.onError(err, () => this.request(url, requestConfig)));
70
+ }
71
+ handleSuccess(res, config) {
72
+ const { returnType = 'json' } = config;
73
+ if (res.status === 204 || res.status === 201 || !res[returnType]) {
74
+ return res;
75
+ }
76
+ return res[returnType]();
77
+ }
78
+ async onError(err, requestFn) {
79
+ const { onError } = this.config;
80
+ if (onError) {
81
+ return onError(err, requestFn);
82
+ }
83
+ throw err;
84
+ }
85
+ createBody(body, contentType) {
86
+ switch (contentType) {
87
+ case 'application/json':
88
+ return JSON.stringify(body);
89
+ case 'application/x-www-form-urlencoded':
90
+ return new URLSearchParams(body);
91
+ default:
92
+ return JSON.stringify(body);
93
+ }
94
+ }
95
+ async handleError(response) {
96
+ if (response.ok) {
97
+ return response;
98
+ }
99
+ const responseBody = await response.text();
100
+ let body = response;
101
+ try {
102
+ body = JSON.parse(responseBody);
103
+ }
104
+ catch (err) {
105
+ body = responseBody;
106
+ }
107
+ const error = {
108
+ message: `HttpError: ${response.status} - ${response.statusText}`,
109
+ statusCode: response.status,
110
+ response,
111
+ body,
112
+ };
113
+ console.error(error);
114
+ throw new HttpError(error);
115
+ }
116
+ }
117
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/api/http.ts"],"names":[],"mappings":"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","sourcesContent":["import qs from 'qs';\n\nexport interface HttpErrorInput {\n message: string;\n statusCode: number;\n response?: Response;\n body?: any;\n}\n\nexport class HttpError extends Error {\n statusCode: number;\n response?: Response;\n body?: any;\n\n constructor(input: HttpErrorInput) {\n super(input.message);\n this.response = input.response;\n this.statusCode = input.statusCode;\n this.body = input.body;\n this.name = 'HttpError';\n }\n}\n\nexport type AbortFunction = () => void;\ntype Token = string | undefined;\ntype RequestFn = <T = any, I = any>(url: string, data: I, config?: RequestConfig) => Promise<T>;\ntype RequestGetFn = <T = any, I = any>(url: string, data?: I, config?: RequestConfig) => Promise<T>;\ntype BeforeHook = (client: HttpClient) => Promise<void> | void;\ntype ErrorHook = <T = any>(err: HttpError, request: () => Promise<T>) => any;\ntype HttpClientInit = RequestInit & {\n baseUrl?: string;\n returnType?: 'json' | 'text' | 'blob';\n /** This function is called before every request. This is where you would check if your token is still valid */\n beforeHook?: BeforeHook;\n /** Function that is called if an error occurs */\n onError?: ErrorHook;\n};\nexport type RequestConfig = HttpClientInit & {\n createAbort?: (abortFunction: AbortFunction) => void;\n};\n\n/**\n * Wrapper around fetch\n */\nexport class HttpClient {\n private defaultConfig: RequestConfig = {\n returnType: 'json',\n };\n\n private config: RequestConfig = {};\n private token: Token;\n\n constructor(config: HttpClientInit = {}) {\n this.config = {\n ...this.defaultConfig,\n ...config,\n };\n }\n\n /**\n *\n *\n * @private\n * @param {'GET'} method\n * @returns {RequestGetFn}\n * @memberof HttpClient\n */\n private createRequest(method: 'GET'): RequestGetFn;\n private createRequest(method: string): RequestFn;\n private createRequest(method: 'GET' | string): RequestFn {\n return (url, data, config) => {\n if (method === 'GET') {\n let getUrl = url;\n if (data) {\n getUrl = url + '?' + qs.stringify(data);\n }\n\n return this.request(getUrl, {\n ...config,\n method: 'GET',\n });\n }\n\n const contentType = config && config.headers && (config.headers as any)['Content-Type'];\n\n return this.request(url, {\n ...config,\n method,\n body: this.createBody(data, contentType),\n });\n };\n }\n\n public get = this.createRequest('GET');\n public post = this.createRequest('POST');\n public put = this.createRequest('PUT');\n public patch = this.createRequest('PATCH');\n public delete = this.createRequest('DELETE');\n\n public setToken = (token: Token) => (this.token = token);\n\n private setAuthenticationHeaders(config: RequestConfig) {\n // if authenticated set bearer token\n if (this.token) {\n config.headers = {\n ...config.headers,\n Authorization: `Bearer ${this.token}`,\n };\n }\n }\n\n /**\n *\n *\n * @private\n * @memberof HttpClient\n */\n private setAbortController = (config: RequestConfig) => {\n const { createAbort } = config;\n if (createAbort) {\n if (typeof AbortController !== undefined) {\n const controller = new AbortController();\n const { signal } = controller;\n config.signal = signal;\n createAbort(controller.abort.bind(controller));\n } else {\n createAbort(() =>\n console.log('The AbortController api isnt available in your browser'),\n );\n }\n }\n };\n\n /**\n *\n *\n * @template T\n * @param {(string | URL)} url\n * @param {RequestConfig} [requestConfig={}]\n * @returns {Promise<T>}\n * @memberof HttpClient\n */\n public async request<T>(url: string | URL, requestConfig: RequestConfig = {}): Promise<T> {\n const { beforeHook } = this.config;\n\n const config: RequestConfig = {\n ...this.config,\n ...requestConfig,\n };\n\n const { baseUrl = '' } = config;\n\n this.setAbortController(config);\n\n if (beforeHook) {\n await beforeHook(this);\n }\n\n this.setAuthenticationHeaders(config);\n\n const requestFn = fetch(baseUrl + url, config)\n .then(this.handleError)\n .then(res => this.handleSuccess(res, config)) as Promise<T>;\n\n return requestFn.catch(err => this.onError<T>(err, () => this.request(url, requestConfig)));\n }\n\n /**\n *\n *\n * @private\n * @param {Response} res\n * @param {RequestConfig} config\n * @returns\n * @memberof HttpClient\n */\n private handleSuccess(res: Response, config: RequestConfig) {\n const { returnType = 'json' } = config;\n\n if (res.status === 204 || res.status === 201 || !res[returnType]) {\n return res;\n }\n\n return res[returnType]();\n }\n\n private async onError<T = any>(err: HttpError, requestFn: () => Promise<T>) {\n const { onError } = this.config;\n\n if (onError) {\n return onError(err, requestFn);\n }\n\n throw err;\n }\n\n /**\n * createBody is responsible for creating a body based on the content type\n *\n * @param body The body\n * @param contentType The content type\n */\n private createBody(body: any, contentType: string): any {\n switch (contentType) {\n case 'application/json':\n return JSON.stringify(body);\n case 'application/x-www-form-urlencoded':\n return new URLSearchParams(body);\n default:\n return JSON.stringify(body);\n }\n }\n\n /**\n * Handles the errors if the fetch request fails and throws a HttpError\n * @param response\n */\n private async handleError(response: Response) {\n if (response.ok) {\n return response;\n }\n\n const responseBody = await response.text();\n let body: any = response;\n\n try {\n body = JSON.parse(responseBody);\n } catch (err) {\n body = responseBody;\n }\n\n const error = {\n message: `HttpError: ${response.status} - ${response.statusText}`,\n statusCode: response.status,\n response,\n body,\n };\n\n console.error(error);\n throw new HttpError(error);\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { HttpClient } from './http';
2
+ export const APIClient = new HttpClient({
3
+ baseUrl: window.__ENVIRONMENT_DETAILS__.apiBaseUrl,
4
+ headers: {
5
+ 'Content-Type': 'application/json',
6
+ },
7
+ });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,uBAAuB,CAAC,UAAU;IAClD,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;KACrC;CACJ,CAAC,CAAC","sourcesContent":["import { HttpClient } from './http';\n\nexport const APIClient = new HttpClient({\n baseUrl: window.__ENVIRONMENT_DETAILS__.apiBaseUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n});\n"]}
@@ -0,0 +1,9 @@
1
+ export * from './api-utilities.types';
2
+ export * from './district-status';
3
+ export * from './find-filter';
4
+ export * from './show-price';
5
+ export * from './get/coordinates';
6
+ export * from './get/layer-raster';
7
+ export * from './decimal-range/merge-decimal-range';
8
+ export * from './decimal-range/merge-specification-range';
9
+ //# sourceMappingURL=api-utilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-utilities.js","sourceRoot":"","sources":["../../../src/api-utilities/api-utilities.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC","sourcesContent":["export * from './api-utilities.types';\n\nexport * from './district-status';\nexport * from './find-filter';\nexport * from './show-price';\n\nexport * from './get/coordinates';\nexport * from './get/layer-raster';\n\nexport * from './decimal-range/merge-decimal-range';\nexport * from './decimal-range/merge-specification-range';\n"]}