@ktnpm_devops/react-component 0.16.0 → 0.17.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 (391) hide show
  1. package/README.md +38 -2
  2. package/dist/constants.d.ts +7 -3
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/geo/GeoMapCard/GeoMapCard.d.ts +1 -1
  5. package/dist/geo/GeoMapCard/GeoMapCard.d.ts.map +1 -1
  6. package/dist/geo/GeoMapCard/GeoMapCard.types.d.ts +28 -2
  7. package/dist/geo/GeoMapCard/GeoMapCard.types.d.ts.map +1 -1
  8. package/dist/geo/GeoMapCard/MapStatusBars.d.ts +11 -0
  9. package/dist/geo/GeoMapCard/MapStatusBars.d.ts.map +1 -0
  10. package/dist/geo/GeoMapCard/ViewportReporter.d.ts +15 -0
  11. package/dist/geo/GeoMapCard/ViewportReporter.d.ts.map +1 -0
  12. package/dist/geo/GeoMapCard/describePoints.d.ts +7 -0
  13. package/dist/geo/GeoMapCard/describePoints.d.ts.map +1 -0
  14. package/dist/geo/GeoMapCard/normalizeViewport.d.ts +13 -0
  15. package/dist/geo/GeoMapCard/normalizeViewport.d.ts.map +1 -0
  16. package/dist/geo/GeoMapCard/normalizeViewport.test.d.ts +2 -0
  17. package/dist/geo/GeoMapCard/normalizeViewport.test.d.ts.map +1 -0
  18. package/dist/geo/GeoMapCard/resolveTiles.d.ts +9 -0
  19. package/dist/geo/GeoMapCard/resolveTiles.d.ts.map +1 -0
  20. package/dist/geo/GeoMapCard/warnMissingBasemapKey.d.ts +9 -0
  21. package/dist/geo/GeoMapCard/warnMissingBasemapKey.d.ts.map +1 -0
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index10.cjs +1 -1
  25. package/dist/index10.js +1 -1
  26. package/dist/index100.cjs +39 -39
  27. package/dist/index100.cjs.map +1 -1
  28. package/dist/index100.js +38 -38
  29. package/dist/index100.js.map +1 -1
  30. package/dist/index101.cjs +9 -58
  31. package/dist/index101.cjs.map +1 -1
  32. package/dist/index101.js +8 -57
  33. package/dist/index101.js.map +1 -1
  34. package/dist/index102.cjs +9 -38
  35. package/dist/index102.cjs.map +1 -1
  36. package/dist/index102.js +10 -39
  37. package/dist/index102.js.map +1 -1
  38. package/dist/index103.cjs +19 -92
  39. package/dist/index103.cjs.map +1 -1
  40. package/dist/index103.js +19 -92
  41. package/dist/index103.js.map +1 -1
  42. package/dist/index104.cjs +14 -40
  43. package/dist/index104.cjs.map +1 -1
  44. package/dist/index104.js +13 -39
  45. package/dist/index104.js.map +1 -1
  46. package/dist/index105.cjs +8 -113
  47. package/dist/index105.cjs.map +1 -1
  48. package/dist/index105.js +8 -113
  49. package/dist/index105.js.map +1 -1
  50. package/dist/index106.cjs +51 -24
  51. package/dist/index106.cjs.map +1 -1
  52. package/dist/index106.js +52 -25
  53. package/dist/index106.js.map +1 -1
  54. package/dist/index107.cjs +9 -15
  55. package/dist/index107.cjs.map +1 -1
  56. package/dist/index107.js +10 -16
  57. package/dist/index107.js.map +1 -1
  58. package/dist/index108.cjs +48 -10
  59. package/dist/index108.cjs.map +1 -1
  60. package/dist/index108.js +47 -9
  61. package/dist/index108.js.map +1 -1
  62. package/dist/index109.cjs +16 -34
  63. package/dist/index109.cjs.map +1 -1
  64. package/dist/index109.js +16 -34
  65. package/dist/index109.js.map +1 -1
  66. package/dist/index110.cjs +36 -43
  67. package/dist/index110.cjs.map +1 -1
  68. package/dist/index110.js +35 -42
  69. package/dist/index110.js.map +1 -1
  70. package/dist/index111.cjs +54 -24
  71. package/dist/index111.cjs.map +1 -1
  72. package/dist/index111.js +53 -23
  73. package/dist/index111.js.map +1 -1
  74. package/dist/index112.cjs +40 -20
  75. package/dist/index112.cjs.map +1 -1
  76. package/dist/index112.js +39 -19
  77. package/dist/index112.js.map +1 -1
  78. package/dist/index113.cjs +16 -14
  79. package/dist/index113.cjs.map +1 -1
  80. package/dist/index113.js +15 -13
  81. package/dist/index113.js.map +1 -1
  82. package/dist/index114.cjs +15 -54
  83. package/dist/index114.cjs.map +1 -1
  84. package/dist/index114.js +16 -55
  85. package/dist/index114.js.map +1 -1
  86. package/dist/index115.cjs +36 -18
  87. package/dist/index115.cjs.map +1 -1
  88. package/dist/index115.js +36 -18
  89. package/dist/index115.js.map +1 -1
  90. package/dist/index116.cjs +64 -13
  91. package/dist/index116.cjs.map +1 -1
  92. package/dist/index116.js +65 -14
  93. package/dist/index116.js.map +1 -1
  94. package/dist/index117.cjs +52 -16
  95. package/dist/index117.cjs.map +1 -1
  96. package/dist/index117.js +52 -16
  97. package/dist/index117.js.map +1 -1
  98. package/dist/index119.cjs +16 -34
  99. package/dist/index119.cjs.map +1 -1
  100. package/dist/index119.js +16 -34
  101. package/dist/index119.js.map +1 -1
  102. package/dist/index12.cjs +1 -1
  103. package/dist/index12.js +1 -1
  104. package/dist/index120.cjs +16 -46
  105. package/dist/index120.cjs.map +1 -1
  106. package/dist/index120.js +16 -46
  107. package/dist/index120.js.map +1 -1
  108. package/dist/index121.cjs +7 -18
  109. package/dist/index121.cjs.map +1 -1
  110. package/dist/index121.js +6 -17
  111. package/dist/index121.js.map +1 -1
  112. package/dist/index122.cjs +15 -33
  113. package/dist/index122.cjs.map +1 -1
  114. package/dist/index122.js +15 -33
  115. package/dist/index122.js.map +1 -1
  116. package/dist/index123.cjs +2 -38
  117. package/dist/index123.cjs.map +1 -1
  118. package/dist/index123.js +3 -39
  119. package/dist/index123.js.map +1 -1
  120. package/dist/index124.cjs +19 -1164
  121. package/dist/index124.cjs.map +1 -1
  122. package/dist/index124.js +17 -1163
  123. package/dist/index124.js.map +1 -1
  124. package/dist/index125.cjs +84 -1575
  125. package/dist/index125.cjs.map +1 -1
  126. package/dist/index125.js +83 -1575
  127. package/dist/index125.js.map +1 -1
  128. package/dist/index126.cjs +24 -0
  129. package/dist/index126.cjs.map +1 -0
  130. package/dist/index126.js +24 -0
  131. package/dist/index126.js.map +1 -0
  132. package/dist/index127.cjs +36 -0
  133. package/dist/index127.cjs.map +1 -0
  134. package/dist/index127.js +36 -0
  135. package/dist/index127.js.map +1 -0
  136. package/dist/index128.cjs +1166 -0
  137. package/dist/index128.cjs.map +1 -0
  138. package/dist/index128.js +1167 -0
  139. package/dist/index128.js.map +1 -0
  140. package/dist/index129.cjs +1578 -0
  141. package/dist/index129.cjs.map +1 -0
  142. package/dist/index129.js +1579 -0
  143. package/dist/index129.js.map +1 -0
  144. package/dist/index13.cjs +1 -1
  145. package/dist/index13.js +1 -1
  146. package/dist/index130.cjs +37 -0
  147. package/dist/index130.cjs.map +1 -0
  148. package/dist/index130.js +37 -0
  149. package/dist/index130.js.map +1 -0
  150. package/dist/index14.cjs +1 -1
  151. package/dist/index14.js +1 -1
  152. package/dist/index15.cjs +1 -1
  153. package/dist/index15.js +1 -1
  154. package/dist/index16.cjs +2 -2
  155. package/dist/index16.js +2 -2
  156. package/dist/index17.cjs +1 -1
  157. package/dist/index17.js +1 -1
  158. package/dist/index19.cjs +1 -1
  159. package/dist/index19.js +1 -1
  160. package/dist/index20.cjs +1 -1
  161. package/dist/index20.js +1 -1
  162. package/dist/index21.cjs +1 -1
  163. package/dist/index21.js +1 -1
  164. package/dist/index22.cjs +2 -2
  165. package/dist/index22.js +2 -2
  166. package/dist/index23.cjs +2 -2
  167. package/dist/index23.js +2 -2
  168. package/dist/index24.cjs +2 -2
  169. package/dist/index24.js +2 -2
  170. package/dist/index25.cjs +1 -1
  171. package/dist/index25.js +1 -1
  172. package/dist/index26.cjs +1 -1
  173. package/dist/index26.js +1 -1
  174. package/dist/index27.cjs +1 -1
  175. package/dist/index27.js +1 -1
  176. package/dist/index28.cjs +1 -1
  177. package/dist/index28.js +1 -1
  178. package/dist/index29.cjs +2 -2
  179. package/dist/index29.js +2 -2
  180. package/dist/index30.cjs +37 -35
  181. package/dist/index30.cjs.map +1 -1
  182. package/dist/index30.js +35 -33
  183. package/dist/index30.js.map +1 -1
  184. package/dist/index31.cjs +4 -4
  185. package/dist/index31.js +4 -4
  186. package/dist/index32.cjs +3 -3
  187. package/dist/index32.js +3 -3
  188. package/dist/index33.cjs +1 -1
  189. package/dist/index33.js +1 -1
  190. package/dist/index34.cjs +2 -2
  191. package/dist/index34.js +2 -2
  192. package/dist/index35.cjs +2 -2
  193. package/dist/index35.js +2 -2
  194. package/dist/index36.cjs +2 -2
  195. package/dist/index36.js +2 -2
  196. package/dist/index37.cjs +1 -1
  197. package/dist/index37.js +1 -1
  198. package/dist/index38.cjs +2 -2
  199. package/dist/index38.js +2 -2
  200. package/dist/index39.cjs +1 -1
  201. package/dist/index39.js +1 -1
  202. package/dist/index40.cjs +2 -2
  203. package/dist/index40.js +2 -2
  204. package/dist/index41.cjs +2 -2
  205. package/dist/index41.js +2 -2
  206. package/dist/index42.cjs +2 -2
  207. package/dist/index42.js +2 -2
  208. package/dist/index43.cjs +1 -1
  209. package/dist/index43.js +1 -1
  210. package/dist/index44.cjs +2 -2
  211. package/dist/index44.js +2 -2
  212. package/dist/index45.cjs +4 -4
  213. package/dist/index45.js +4 -4
  214. package/dist/index46.cjs +1 -1
  215. package/dist/index46.js +1 -1
  216. package/dist/index47.cjs +1 -1
  217. package/dist/index47.js +1 -1
  218. package/dist/index48.cjs +1 -1
  219. package/dist/index48.js +1 -1
  220. package/dist/index49.cjs +2 -2
  221. package/dist/index49.js +2 -2
  222. package/dist/index50.cjs +2 -2
  223. package/dist/index50.js +2 -2
  224. package/dist/index51.cjs +1 -1
  225. package/dist/index51.js +1 -1
  226. package/dist/index52.cjs +3 -3
  227. package/dist/index52.js +3 -3
  228. package/dist/index53.cjs +1 -1
  229. package/dist/index53.js +1 -1
  230. package/dist/index54.cjs +1 -1
  231. package/dist/index54.js +1 -1
  232. package/dist/index55.cjs +3 -3
  233. package/dist/index55.js +3 -3
  234. package/dist/index56.cjs +1 -1
  235. package/dist/index56.js +1 -1
  236. package/dist/index57.cjs +1 -1
  237. package/dist/index57.js +1 -1
  238. package/dist/index58.cjs +2 -2
  239. package/dist/index58.js +2 -2
  240. package/dist/index60.cjs +13 -22
  241. package/dist/index60.cjs.map +1 -1
  242. package/dist/index60.js +13 -22
  243. package/dist/index60.js.map +1 -1
  244. package/dist/index61.cjs +18 -21
  245. package/dist/index61.cjs.map +1 -1
  246. package/dist/index61.js +19 -22
  247. package/dist/index61.js.map +1 -1
  248. package/dist/index62.cjs +13 -13
  249. package/dist/index62.js +13 -13
  250. package/dist/index63.cjs +10 -143
  251. package/dist/index63.cjs.map +1 -1
  252. package/dist/index63.js +8 -141
  253. package/dist/index63.js.map +1 -1
  254. package/dist/index64.cjs +143 -25
  255. package/dist/index64.cjs.map +1 -1
  256. package/dist/index64.js +141 -23
  257. package/dist/index64.js.map +1 -1
  258. package/dist/index65.cjs +16 -13
  259. package/dist/index65.cjs.map +1 -1
  260. package/dist/index65.js +17 -14
  261. package/dist/index65.js.map +1 -1
  262. package/dist/index66.cjs +19 -13
  263. package/dist/index66.cjs.map +1 -1
  264. package/dist/index66.js +20 -14
  265. package/dist/index66.js.map +1 -1
  266. package/dist/index68.cjs +35 -14
  267. package/dist/index68.cjs.map +1 -1
  268. package/dist/index68.js +36 -15
  269. package/dist/index68.js.map +1 -1
  270. package/dist/index69.cjs +28 -28
  271. package/dist/index69.js +28 -28
  272. package/dist/index70.cjs +19 -19
  273. package/dist/index70.js +20 -20
  274. package/dist/index71.cjs +4 -46
  275. package/dist/index71.cjs.map +1 -1
  276. package/dist/index71.js +5 -47
  277. package/dist/index71.js.map +1 -1
  278. package/dist/index72.cjs +116 -7
  279. package/dist/index72.cjs.map +1 -1
  280. package/dist/index72.js +115 -6
  281. package/dist/index72.js.map +1 -1
  282. package/dist/index73.cjs +35 -77
  283. package/dist/index73.cjs.map +1 -1
  284. package/dist/index73.js +35 -77
  285. package/dist/index73.js.map +1 -1
  286. package/dist/index74.cjs +52 -52
  287. package/dist/index74.js +52 -52
  288. package/dist/index75.cjs +39 -39
  289. package/dist/index75.cjs.map +1 -1
  290. package/dist/index75.js +38 -38
  291. package/dist/index75.js.map +1 -1
  292. package/dist/index76.cjs +89 -14
  293. package/dist/index76.cjs.map +1 -1
  294. package/dist/index76.js +89 -14
  295. package/dist/index76.js.map +1 -1
  296. package/dist/index77.cjs +35 -2
  297. package/dist/index77.cjs.map +1 -1
  298. package/dist/index77.js +36 -3
  299. package/dist/index77.js.map +1 -1
  300. package/dist/index78.cjs +22 -6
  301. package/dist/index78.cjs.map +1 -1
  302. package/dist/index78.js +21 -5
  303. package/dist/index78.js.map +1 -1
  304. package/dist/index79.cjs +70 -10
  305. package/dist/index79.cjs.map +1 -1
  306. package/dist/index79.js +68 -8
  307. package/dist/index79.js.map +1 -1
  308. package/dist/index80.cjs +7 -33
  309. package/dist/index80.cjs.map +1 -1
  310. package/dist/index80.js +6 -32
  311. package/dist/index80.js.map +1 -1
  312. package/dist/index81.cjs +34 -16
  313. package/dist/index81.cjs.map +1 -1
  314. package/dist/index81.js +35 -17
  315. package/dist/index81.js.map +1 -1
  316. package/dist/index82.cjs +134 -16
  317. package/dist/index82.cjs.map +1 -1
  318. package/dist/index82.js +133 -15
  319. package/dist/index82.js.map +1 -1
  320. package/dist/index83.cjs +36 -15
  321. package/dist/index83.cjs.map +1 -1
  322. package/dist/index83.js +37 -16
  323. package/dist/index83.js.map +1 -1
  324. package/dist/index84.cjs +1 -1
  325. package/dist/index84.js +1 -1
  326. package/dist/index85.cjs +32 -17
  327. package/dist/index85.cjs.map +1 -1
  328. package/dist/index85.js +33 -18
  329. package/dist/index85.js.map +1 -1
  330. package/dist/index86.cjs +28 -64
  331. package/dist/index86.cjs.map +1 -1
  332. package/dist/index86.js +28 -64
  333. package/dist/index86.js.map +1 -1
  334. package/dist/index87.cjs +2 -20
  335. package/dist/index87.cjs.map +1 -1
  336. package/dist/index87.js +3 -21
  337. package/dist/index87.js.map +1 -1
  338. package/dist/index88.cjs +17 -2
  339. package/dist/index88.cjs.map +1 -1
  340. package/dist/index88.js +18 -3
  341. package/dist/index88.js.map +1 -1
  342. package/dist/index89.cjs +20 -2
  343. package/dist/index89.cjs.map +1 -1
  344. package/dist/index89.js +20 -2
  345. package/dist/index89.js.map +1 -1
  346. package/dist/index90.cjs +46 -10
  347. package/dist/index90.cjs.map +1 -1
  348. package/dist/index90.js +47 -11
  349. package/dist/index90.js.map +1 -1
  350. package/dist/index91.cjs +22 -13
  351. package/dist/index91.cjs.map +1 -1
  352. package/dist/index91.js +23 -14
  353. package/dist/index91.js.map +1 -1
  354. package/dist/index92.cjs +22 -49
  355. package/dist/index92.cjs.map +1 -1
  356. package/dist/index92.js +22 -49
  357. package/dist/index92.js.map +1 -1
  358. package/dist/index93.cjs +7 -134
  359. package/dist/index93.cjs.map +1 -1
  360. package/dist/index93.js +6 -133
  361. package/dist/index93.js.map +1 -1
  362. package/dist/index94.cjs +13 -40
  363. package/dist/index94.cjs.map +1 -1
  364. package/dist/index94.js +14 -41
  365. package/dist/index94.js.map +1 -1
  366. package/dist/index95.cjs +3 -36
  367. package/dist/index95.cjs.map +1 -1
  368. package/dist/index95.js +3 -36
  369. package/dist/index95.js.map +1 -1
  370. package/dist/index96.cjs +15 -24
  371. package/dist/index96.cjs.map +1 -1
  372. package/dist/index96.js +15 -24
  373. package/dist/index96.js.map +1 -1
  374. package/dist/index97.cjs +33 -20
  375. package/dist/index97.cjs.map +1 -1
  376. package/dist/index97.js +33 -20
  377. package/dist/index97.js.map +1 -1
  378. package/dist/index98.cjs +37 -63
  379. package/dist/index98.cjs.map +1 -1
  380. package/dist/index98.js +37 -63
  381. package/dist/index98.js.map +1 -1
  382. package/dist/index99.cjs +23 -6
  383. package/dist/index99.cjs.map +1 -1
  384. package/dist/index99.js +23 -6
  385. package/dist/index99.js.map +1 -1
  386. package/dist/style.css +45 -0
  387. package/dist/types/geo.types.d.ts +14 -0
  388. package/dist/types/geo.types.d.ts.map +1 -1
  389. package/dist/types/index.d.ts +1 -1
  390. package/dist/types/index.d.ts.map +1 -1
  391. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index77.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index77.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index77.js CHANGED
@@ -1,9 +1,42 @@
1
- const root = "krc-root-93Nfs";
1
+ const root = "krc-root-pttoq";
2
+ const header = "krc-header-npqnm";
3
+ const title = "krc-title-Nho7q";
4
+ const headerActions = "krc-headerActions-ealva";
5
+ const toolbar = "krc-toolbar-JDGNF";
6
+ const warning = "krc-warning-zk0fc";
7
+ const chartContainer = "krc-chartContainer-9YPrR";
8
+ const loading = "krc-loading-kZWgE";
9
+ const empty = "krc-empty-JDNOq";
10
+ const error = "krc-error-IULEe";
11
+ const retryButton = "krc-retryButton-GvyS0";
12
+ const compact = "krc-compact-bzibR";
2
13
  const styles = {
3
- root
14
+ root,
15
+ header,
16
+ title,
17
+ headerActions,
18
+ toolbar,
19
+ warning,
20
+ chartContainer,
21
+ loading,
22
+ empty,
23
+ error,
24
+ retryButton,
25
+ compact
4
26
  };
5
27
  export {
28
+ chartContainer,
29
+ compact,
6
30
  styles as default,
7
- root
31
+ empty,
32
+ error,
33
+ header,
34
+ headerActions,
35
+ loading,
36
+ retryButton,
37
+ root,
38
+ title,
39
+ toolbar,
40
+ warning
8
41
  };
9
42
  //# sourceMappingURL=index77.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index77.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index77.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index78.cjs CHANGED
@@ -1,9 +1,25 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const root = "krc-root-pJYpn";
4
- const styles = {
5
- root
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const merge = (a, b) => a == null ? b : b == null ? a : a + b;
4
+ const pivotGroupedBars = (data) => {
5
+ const categories = /* @__PURE__ */ new Set();
6
+ const cells = /* @__PURE__ */ new Map();
7
+ for (const { category, series: series2, value } of data) {
8
+ categories.add(category);
9
+ let row = cells.get(series2);
10
+ if (!row) {
11
+ row = /* @__PURE__ */ new Map();
12
+ cells.set(series2, row);
13
+ }
14
+ row.set(category, row.has(category) ? merge(row.get(category) ?? null, value) : value);
15
+ }
16
+ const categoryList = [...categories];
17
+ const series = [...cells.entries()].map(([name, row]) => ({
18
+ name,
19
+ values: categoryList.map((category) => row.get(category) ?? null)
20
+ }));
21
+ const hasValues = series.some((s) => s.values.some((v) => v != null));
22
+ return { categories: categoryList, series, hasValues };
6
23
  };
7
- exports.default = styles;
8
- exports.root = root;
24
+ exports.pivotGroupedBars = pivotGroupedBars;
9
25
  //# sourceMappingURL=index78.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index78.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index78.cjs","sources":["../src/charts/GroupedBarChartCard/pivotGroupedBars.ts"],"sourcesContent":["import type { GroupedBarPoint } from '../../types/chart.types';\n\n/** One series with its values aligned to `categories`; `null` is a gap. */\nexport interface PivotedSeries {\n name: string;\n values: (number | null)[];\n}\n\n/** Category × series matrix of a grouped bar chart. */\nexport interface GroupedBarPivot {\n /** First-seen order. */\n categories: string[];\n /** First-seen order. */\n series: PivotedSeries[];\n /** Whether any value is non-null — false means there is nothing to draw. */\n hasValues: boolean;\n}\n\n/** `null` adds nothing: only nulls stay a gap. */\nconst merge = (a: number | null, b: number | null) => (a == null ? b : b == null ? a : a + b);\n\n/**\n * Pivot points into a category × series matrix, keeping first-appearance order,\n * summing repeated pairs and filling missing pairs with `null` — never `0`.\n */\nexport const pivotGroupedBars = (data: GroupedBarPoint[]): GroupedBarPivot => {\n const categories = new Set<string>();\n const cells = new Map<string, Map<string, number | null>>();\n\n for (const { category, series, value } of data) {\n categories.add(category);\n let row = cells.get(series);\n if (!row) {\n row = new Map();\n cells.set(series, row);\n }\n row.set(category, row.has(category) ? merge(row.get(category) ?? null, value) : value);\n }\n\n const categoryList = [...categories];\n const series = [...cells.entries()].map(([name, row]) => ({\n name,\n values: categoryList.map((category) => row.get(category) ?? null),\n }));\n const hasValues = series.some((s) => s.values.some((v) => v != null));\n\n return { categories: categoryList, series, hasValues };\n};\n"],"names":["series"],"mappings":";;AAmBA,MAAM,QAAQ,CAAC,GAAkB,MAAsB,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI;AAMpF,MAAM,mBAAmB,CAAC,SAA6C;AAC5E,QAAM,iCAAiB,IAAA;AACvB,QAAM,4BAAY,IAAA;AAElB,aAAW,EAAE,UAAU,QAAAA,SAAQ,MAAA,KAAW,MAAM;AAC9C,eAAW,IAAI,QAAQ;AACvB,QAAI,MAAM,MAAM,IAAIA,OAAM;AAC1B,QAAI,CAAC,KAAK;AACR,gCAAU,IAAA;AACV,YAAM,IAAIA,SAAQ,GAAG;AAAA,IACvB;AACA,QAAI,IAAI,UAAU,IAAI,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,EACvF;AAEA,QAAM,eAAe,CAAC,GAAG,UAAU;AACnC,QAAM,SAAS,CAAC,GAAG,MAAM,QAAA,CAAS,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO;AAAA,IACxD;AAAA,IACA,QAAQ,aAAa,IAAI,CAAC,aAAa,IAAI,IAAI,QAAQ,KAAK,IAAI;AAAA,EAAA,EAChE;AACF,QAAM,YAAY,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AAEpE,SAAO,EAAE,YAAY,cAAc,QAAQ,UAAA;AAC7C;;"}
package/dist/index78.js CHANGED
@@ -1,9 +1,25 @@
1
- const root = "krc-root-pJYpn";
2
- const styles = {
3
- root
1
+ const merge = (a, b) => a == null ? b : b == null ? a : a + b;
2
+ const pivotGroupedBars = (data) => {
3
+ const categories = /* @__PURE__ */ new Set();
4
+ const cells = /* @__PURE__ */ new Map();
5
+ for (const { category, series: series2, value } of data) {
6
+ categories.add(category);
7
+ let row = cells.get(series2);
8
+ if (!row) {
9
+ row = /* @__PURE__ */ new Map();
10
+ cells.set(series2, row);
11
+ }
12
+ row.set(category, row.has(category) ? merge(row.get(category) ?? null, value) : value);
13
+ }
14
+ const categoryList = [...categories];
15
+ const series = [...cells.entries()].map(([name, row]) => ({
16
+ name,
17
+ values: categoryList.map((category) => row.get(category) ?? null)
18
+ }));
19
+ const hasValues = series.some((s) => s.values.some((v) => v != null));
20
+ return { categories: categoryList, series, hasValues };
4
21
  };
5
22
  export {
6
- styles as default,
7
- root
23
+ pivotGroupedBars
8
24
  };
9
25
  //# sourceMappingURL=index78.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index78.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index78.js","sources":["../src/charts/GroupedBarChartCard/pivotGroupedBars.ts"],"sourcesContent":["import type { GroupedBarPoint } from '../../types/chart.types';\n\n/** One series with its values aligned to `categories`; `null` is a gap. */\nexport interface PivotedSeries {\n name: string;\n values: (number | null)[];\n}\n\n/** Category × series matrix of a grouped bar chart. */\nexport interface GroupedBarPivot {\n /** First-seen order. */\n categories: string[];\n /** First-seen order. */\n series: PivotedSeries[];\n /** Whether any value is non-null — false means there is nothing to draw. */\n hasValues: boolean;\n}\n\n/** `null` adds nothing: only nulls stay a gap. */\nconst merge = (a: number | null, b: number | null) => (a == null ? b : b == null ? a : a + b);\n\n/**\n * Pivot points into a category × series matrix, keeping first-appearance order,\n * summing repeated pairs and filling missing pairs with `null` — never `0`.\n */\nexport const pivotGroupedBars = (data: GroupedBarPoint[]): GroupedBarPivot => {\n const categories = new Set<string>();\n const cells = new Map<string, Map<string, number | null>>();\n\n for (const { category, series, value } of data) {\n categories.add(category);\n let row = cells.get(series);\n if (!row) {\n row = new Map();\n cells.set(series, row);\n }\n row.set(category, row.has(category) ? merge(row.get(category) ?? null, value) : value);\n }\n\n const categoryList = [...categories];\n const series = [...cells.entries()].map(([name, row]) => ({\n name,\n values: categoryList.map((category) => row.get(category) ?? null),\n }));\n const hasValues = series.some((s) => s.values.some((v) => v != null));\n\n return { categories: categoryList, series, hasValues };\n};\n"],"names":["series"],"mappings":"AAmBA,MAAM,QAAQ,CAAC,GAAkB,MAAsB,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI;AAMpF,MAAM,mBAAmB,CAAC,SAA6C;AAC5E,QAAM,iCAAiB,IAAA;AACvB,QAAM,4BAAY,IAAA;AAElB,aAAW,EAAE,UAAU,QAAAA,SAAQ,MAAA,KAAW,MAAM;AAC9C,eAAW,IAAI,QAAQ;AACvB,QAAI,MAAM,MAAM,IAAIA,OAAM;AAC1B,QAAI,CAAC,KAAK;AACR,gCAAU,IAAA;AACV,YAAM,IAAIA,SAAQ,GAAG;AAAA,IACvB;AACA,QAAI,IAAI,UAAU,IAAI,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,EACvF;AAEA,QAAM,eAAe,CAAC,GAAG,UAAU;AACnC,QAAM,SAAS,CAAC,GAAG,MAAM,QAAA,CAAS,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO;AAAA,IACxD;AAAA,IACA,QAAQ,aAAa,IAAI,CAAC,aAAa,IAAI,IAAI,QAAQ,KAAK,IAAI;AAAA,EAAA,EAChE;AACF,QAAM,YAAY,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AAEpE,SAAO,EAAE,YAAY,cAAc,QAAQ,UAAA;AAC7C;"}
package/dist/index79.cjs CHANGED
@@ -1,12 +1,72 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const container = "krc-container-cpDoQ";
4
- const root = "krc-root-20TMP";
5
- const styles = {
6
- container,
7
- root
8
- };
9
- exports.container = container;
10
- exports.default = styles;
11
- exports.root = root;
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const constants = require("./index64.cjs");
4
+ const { GRID_MARGIN, AXIS_NAME_GAP } = constants.GROUPED_BAR;
5
+ const escapeHtml = (value) => value.replace(/[&<>"]/g, (char) => `&#${char.charCodeAt(0)};`);
6
+ const colorFor = (name, index, seriesColors) => (seriesColors == null ? void 0 : seriesColors[name]) ?? constants.CHART_COLORS[index % constants.CHART_COLORS.length];
7
+ const markerFor = (color) => {
8
+ const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = constants.GROUPED_BAR;
9
+ return `<span style="display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};"></span>`;
10
+ };
11
+ const buildTooltipFormatter = (pivot, colors, noValueText) => (params) => {
12
+ const first = Array.isArray(params) ? params[0] : params;
13
+ const index = first == null ? void 0 : first.dataIndex;
14
+ if (index == null || index >= pivot.categories.length) return "";
15
+ const lines = [escapeHtml(pivot.categories[index])];
16
+ pivot.series.forEach((s, i) => {
17
+ const value = s.values[index];
18
+ const text = value == null ? escapeHtml(noValueText) : String(value);
19
+ lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);
20
+ });
21
+ return lines.join("<br/>");
22
+ };
23
+ const buildGrid = (config) => {
24
+ const named = Boolean(config.valueLabel);
25
+ return {
26
+ left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),
27
+ right: GRID_MARGIN.RIGHT,
28
+ top: GRID_MARGIN.TOP,
29
+ // Room for a horizontal value-axis name and the legend, each only when drawn.
30
+ bottom: GRID_MARGIN.BASE + (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) + (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),
31
+ containLabel: true
32
+ };
33
+ };
34
+ const buildGroupedBarOption = (pivot, config) => {
35
+ const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));
36
+ const categoryAxis = {
37
+ type: "category",
38
+ data: pivot.categories,
39
+ // Horizontal bars read top-down, so the first category goes on top.
40
+ inverse: config.invertAxis
41
+ };
42
+ const valueAxis = {
43
+ type: "value",
44
+ name: config.valueLabel,
45
+ nameLocation: "middle",
46
+ nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,
47
+ // Without this a vertical axis name is drawn horizontally and eats the plot's width.
48
+ nameRotate: config.invertAxis ? 0 : 90,
49
+ minInterval: config.integerValues ? 1 : void 0
50
+ };
51
+ return {
52
+ tooltip: {
53
+ trigger: "axis",
54
+ axisPointer: { type: "shadow" },
55
+ formatter: buildTooltipFormatter(pivot, colors, config.noValueText)
56
+ },
57
+ legend: { show: !config.hideLegend, bottom: 0, type: "scroll" },
58
+ grid: buildGrid(config),
59
+ xAxis: config.invertAxis ? valueAxis : categoryAxis,
60
+ yAxis: config.invertAxis ? categoryAxis : valueAxis,
61
+ series: pivot.series.map((s, i) => ({
62
+ name: s.name,
63
+ type: "bar",
64
+ data: s.values,
65
+ barMinHeight: constants.GROUPED_BAR.MIN_BAR_HEIGHT,
66
+ itemStyle: { color: colors[i] },
67
+ emphasis: { focus: "series" }
68
+ }))
69
+ };
70
+ };
71
+ exports.buildGroupedBarOption = buildGroupedBarOption;
12
72
  //# sourceMappingURL=index79.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index79.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"index79.cjs","sources":["../src/charts/GroupedBarChartCard/buildGroupedBarOption.ts"],"sourcesContent":["import type { GroupedBarPivot } from './pivotGroupedBars';\nimport { CHART_COLORS, GROUPED_BAR } from '../../constants';\n\nexport interface GroupedBarOptionConfig {\n seriesColors?: Readonly<Record<string, string>>;\n invertAxis: boolean;\n hideLegend: boolean;\n integerValues: boolean;\n valueLabel?: string;\n /** Tooltip text for a gap. */\n noValueText: string;\n}\n\nconst { GRID_MARGIN, AXIS_NAME_GAP } = GROUPED_BAR;\n\n/** Category and series names come from consumer data and land in the tooltip's HTML. */\nconst escapeHtml = (value: string) =>\n value.replace(/[&<>\"]/g, (char) => `&#${char.charCodeAt(0)};`);\n\n/** Pinned colour first, else the palette by first-seen position. */\nconst colorFor = (name: string, index: number, seriesColors?: Readonly<Record<string, string>>) =>\n seriesColors?.[name] ?? CHART_COLORS[index % CHART_COLORS.length];\n\nconst markerFor = (color: string) => {\n const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = GROUPED_BAR;\n return `<span style=\"display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};\"></span>`;\n};\n\n/**\n * The tooltip is built from the pivot rather than from echarts' params, so every\n * series is listed in series order and a gap reads as `noValueText`, never `-`.\n */\nconst buildTooltipFormatter =\n (pivot: GroupedBarPivot, colors: string[], noValueText: string) => (params: unknown) => {\n const first = (Array.isArray(params) ? params[0] : params) as\n | { dataIndex?: number }\n | undefined;\n const index = first?.dataIndex;\n if (index == null || index >= pivot.categories.length) return '';\n\n const lines = [escapeHtml(pivot.categories[index])];\n pivot.series.forEach((s, i) => {\n const value = s.values[index];\n const text = value == null ? escapeHtml(noValueText) : String(value);\n lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);\n });\n\n return lines.join('<br/>');\n };\n\nconst buildGrid = (config: GroupedBarOptionConfig) => {\n const named = Boolean(config.valueLabel);\n return {\n left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),\n right: GRID_MARGIN.RIGHT,\n top: GRID_MARGIN.TOP,\n // Room for a horizontal value-axis name and the legend, each only when drawn.\n bottom:\n GRID_MARGIN.BASE +\n (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) +\n (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),\n containLabel: true,\n };\n};\n\nexport const buildGroupedBarOption = (pivot: GroupedBarPivot, config: GroupedBarOptionConfig) => {\n const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));\n\n const categoryAxis = {\n type: 'category' as const,\n data: pivot.categories,\n // Horizontal bars read top-down, so the first category goes on top.\n inverse: config.invertAxis,\n };\n const valueAxis = {\n type: 'value' as const,\n name: config.valueLabel,\n nameLocation: 'middle' as const,\n nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,\n // Without this a vertical axis name is drawn horizontally and eats the plot's width.\n nameRotate: config.invertAxis ? 0 : 90,\n minInterval: config.integerValues ? 1 : undefined,\n };\n\n return {\n tooltip: {\n trigger: 'axis' as const,\n axisPointer: { type: 'shadow' as const },\n formatter: buildTooltipFormatter(pivot, colors, config.noValueText),\n },\n legend: { show: !config.hideLegend, bottom: 0, type: 'scroll' as const },\n grid: buildGrid(config),\n xAxis: config.invertAxis ? valueAxis : categoryAxis,\n yAxis: config.invertAxis ? categoryAxis : valueAxis,\n series: pivot.series.map((s, i) => ({\n name: s.name,\n type: 'bar' as const,\n data: s.values,\n barMinHeight: GROUPED_BAR.MIN_BAR_HEIGHT,\n itemStyle: { color: colors[i] },\n emphasis: { focus: 'series' as const },\n })),\n };\n};\n"],"names":["GROUPED_BAR","CHART_COLORS"],"mappings":";;;AAaA,MAAM,EAAE,aAAa,cAAA,IAAkBA,UAAAA;AAGvC,MAAM,aAAa,CAAC,UAClB,MAAM,QAAQ,WAAW,CAAC,SAAS,KAAK,KAAK,WAAW,CAAC,CAAC,GAAG;AAG/D,MAAM,WAAW,CAAC,MAAc,OAAe,kBAC7C,6CAAe,UAASC,UAAAA,aAAa,QAAQA,UAAAA,aAAa,MAAM;AAElE,MAAM,YAAY,CAAC,UAAkB;AACnC,QAAM,EAAE,qBAAqB,MAAM,oBAAoB,QAAQD,UAAAA;AAC/D,SAAO,kDAAkD,GAAG,8BAA8B,IAAI,aAAa,IAAI,uBAAuB,WAAW,KAAK,CAAC;AACzJ;AAMA,MAAM,wBACJ,CAAC,OAAwB,QAAkB,gBAAwB,CAAC,WAAoB;AACtF,QAAM,QAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAGnD,QAAM,QAAQ,+BAAO;AACrB,MAAI,SAAS,QAAQ,SAAS,MAAM,WAAW,OAAQ,QAAO;AAE9D,QAAM,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK,CAAC,CAAC;AAClD,QAAM,OAAO,QAAQ,CAAC,GAAG,MAAM;AAC7B,UAAM,QAAQ,EAAE,OAAO,KAAK;AAC5B,UAAM,OAAO,SAAS,OAAO,WAAW,WAAW,IAAI,OAAO,KAAK;AACnE,UAAM,KAAK,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AAAA,EACpE,CAAC;AAED,SAAO,MAAM,KAAK,OAAO;AAC3B;AAEF,MAAM,YAAY,CAAC,WAAmC;AACpD,QAAM,QAAQ,QAAQ,OAAO,UAAU;AACvC,SAAO;AAAA,IACL,MAAM,YAAY,QAAQ,SAAS,CAAC,OAAO,aAAa,YAAY,eAAe;AAAA,IACnF,OAAO,YAAY;AAAA,IACnB,KAAK,YAAY;AAAA;AAAA,IAEjB,QACE,YAAY,QACX,SAAS,OAAO,aAAa,YAAY,eAAe,MACxD,OAAO,aAAa,IAAI,YAAY;AAAA,IACvC,cAAc;AAAA,EAAA;AAElB;AAEO,MAAM,wBAAwB,CAAC,OAAwB,WAAmC;AAC/F,QAAM,SAAS,MAAM,OAAO,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM,GAAG,OAAO,YAAY,CAAC;AAElF,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,MAAM;AAAA;AAAA,IAEZ,SAAS,OAAO;AAAA,EAAA;AAElB,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,MAAM,OAAO;AAAA,IACb,cAAc;AAAA,IACd,SAAS,OAAO,aAAa,cAAc,IAAI,cAAc;AAAA;AAAA,IAE7D,YAAY,OAAO,aAAa,IAAI;AAAA,IACpC,aAAa,OAAO,gBAAgB,IAAI;AAAA,EAAA;AAG1C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa,EAAE,MAAM,SAAA;AAAA,MACrB,WAAW,sBAAsB,OAAO,QAAQ,OAAO,WAAW;AAAA,IAAA;AAAA,IAEpE,QAAQ,EAAE,MAAM,CAAC,OAAO,YAAY,QAAQ,GAAG,MAAM,SAAA;AAAA,IACrD,MAAM,UAAU,MAAM;AAAA,IACtB,OAAO,OAAO,aAAa,YAAY;AAAA,IACvC,OAAO,OAAO,aAAa,eAAe;AAAA,IAC1C,QAAQ,MAAM,OAAO,IAAI,CAAC,GAAG,OAAO;AAAA,MAClC,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,MAAM,EAAE;AAAA,MACR,cAAcA,UAAAA,YAAY;AAAA,MAC1B,WAAW,EAAE,OAAO,OAAO,CAAC,EAAA;AAAA,MAC5B,UAAU,EAAE,OAAO,SAAA;AAAA,IAAkB,EACrC;AAAA,EAAA;AAEN;;"}
package/dist/index79.js CHANGED
@@ -1,12 +1,72 @@
1
- const container = "krc-container-cpDoQ";
2
- const root = "krc-root-20TMP";
3
- const styles = {
4
- container,
5
- root
1
+ import { GROUPED_BAR, CHART_COLORS } from "./index64.js";
2
+ const { GRID_MARGIN, AXIS_NAME_GAP } = GROUPED_BAR;
3
+ const escapeHtml = (value) => value.replace(/[&<>"]/g, (char) => `&#${char.charCodeAt(0)};`);
4
+ const colorFor = (name, index, seriesColors) => (seriesColors == null ? void 0 : seriesColors[name]) ?? CHART_COLORS[index % CHART_COLORS.length];
5
+ const markerFor = (color) => {
6
+ const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = GROUPED_BAR;
7
+ return `<span style="display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};"></span>`;
8
+ };
9
+ const buildTooltipFormatter = (pivot, colors, noValueText) => (params) => {
10
+ const first = Array.isArray(params) ? params[0] : params;
11
+ const index = first == null ? void 0 : first.dataIndex;
12
+ if (index == null || index >= pivot.categories.length) return "";
13
+ const lines = [escapeHtml(pivot.categories[index])];
14
+ pivot.series.forEach((s, i) => {
15
+ const value = s.values[index];
16
+ const text = value == null ? escapeHtml(noValueText) : String(value);
17
+ lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);
18
+ });
19
+ return lines.join("<br/>");
20
+ };
21
+ const buildGrid = (config) => {
22
+ const named = Boolean(config.valueLabel);
23
+ return {
24
+ left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),
25
+ right: GRID_MARGIN.RIGHT,
26
+ top: GRID_MARGIN.TOP,
27
+ // Room for a horizontal value-axis name and the legend, each only when drawn.
28
+ bottom: GRID_MARGIN.BASE + (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) + (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),
29
+ containLabel: true
30
+ };
31
+ };
32
+ const buildGroupedBarOption = (pivot, config) => {
33
+ const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));
34
+ const categoryAxis = {
35
+ type: "category",
36
+ data: pivot.categories,
37
+ // Horizontal bars read top-down, so the first category goes on top.
38
+ inverse: config.invertAxis
39
+ };
40
+ const valueAxis = {
41
+ type: "value",
42
+ name: config.valueLabel,
43
+ nameLocation: "middle",
44
+ nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,
45
+ // Without this a vertical axis name is drawn horizontally and eats the plot's width.
46
+ nameRotate: config.invertAxis ? 0 : 90,
47
+ minInterval: config.integerValues ? 1 : void 0
48
+ };
49
+ return {
50
+ tooltip: {
51
+ trigger: "axis",
52
+ axisPointer: { type: "shadow" },
53
+ formatter: buildTooltipFormatter(pivot, colors, config.noValueText)
54
+ },
55
+ legend: { show: !config.hideLegend, bottom: 0, type: "scroll" },
56
+ grid: buildGrid(config),
57
+ xAxis: config.invertAxis ? valueAxis : categoryAxis,
58
+ yAxis: config.invertAxis ? categoryAxis : valueAxis,
59
+ series: pivot.series.map((s, i) => ({
60
+ name: s.name,
61
+ type: "bar",
62
+ data: s.values,
63
+ barMinHeight: GROUPED_BAR.MIN_BAR_HEIGHT,
64
+ itemStyle: { color: colors[i] },
65
+ emphasis: { focus: "series" }
66
+ }))
67
+ };
6
68
  };
7
69
  export {
8
- container,
9
- styles as default,
10
- root
70
+ buildGroupedBarOption
11
71
  };
12
72
  //# sourceMappingURL=index79.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index79.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index79.js","sources":["../src/charts/GroupedBarChartCard/buildGroupedBarOption.ts"],"sourcesContent":["import type { GroupedBarPivot } from './pivotGroupedBars';\nimport { CHART_COLORS, GROUPED_BAR } from '../../constants';\n\nexport interface GroupedBarOptionConfig {\n seriesColors?: Readonly<Record<string, string>>;\n invertAxis: boolean;\n hideLegend: boolean;\n integerValues: boolean;\n valueLabel?: string;\n /** Tooltip text for a gap. */\n noValueText: string;\n}\n\nconst { GRID_MARGIN, AXIS_NAME_GAP } = GROUPED_BAR;\n\n/** Category and series names come from consumer data and land in the tooltip's HTML. */\nconst escapeHtml = (value: string) =>\n value.replace(/[&<>\"]/g, (char) => `&#${char.charCodeAt(0)};`);\n\n/** Pinned colour first, else the palette by first-seen position. */\nconst colorFor = (name: string, index: number, seriesColors?: Readonly<Record<string, string>>) =>\n seriesColors?.[name] ?? CHART_COLORS[index % CHART_COLORS.length];\n\nconst markerFor = (color: string) => {\n const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = GROUPED_BAR;\n return `<span style=\"display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};\"></span>`;\n};\n\n/**\n * The tooltip is built from the pivot rather than from echarts' params, so every\n * series is listed in series order and a gap reads as `noValueText`, never `-`.\n */\nconst buildTooltipFormatter =\n (pivot: GroupedBarPivot, colors: string[], noValueText: string) => (params: unknown) => {\n const first = (Array.isArray(params) ? params[0] : params) as\n | { dataIndex?: number }\n | undefined;\n const index = first?.dataIndex;\n if (index == null || index >= pivot.categories.length) return '';\n\n const lines = [escapeHtml(pivot.categories[index])];\n pivot.series.forEach((s, i) => {\n const value = s.values[index];\n const text = value == null ? escapeHtml(noValueText) : String(value);\n lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);\n });\n\n return lines.join('<br/>');\n };\n\nconst buildGrid = (config: GroupedBarOptionConfig) => {\n const named = Boolean(config.valueLabel);\n return {\n left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),\n right: GRID_MARGIN.RIGHT,\n top: GRID_MARGIN.TOP,\n // Room for a horizontal value-axis name and the legend, each only when drawn.\n bottom:\n GRID_MARGIN.BASE +\n (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) +\n (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),\n containLabel: true,\n };\n};\n\nexport const buildGroupedBarOption = (pivot: GroupedBarPivot, config: GroupedBarOptionConfig) => {\n const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));\n\n const categoryAxis = {\n type: 'category' as const,\n data: pivot.categories,\n // Horizontal bars read top-down, so the first category goes on top.\n inverse: config.invertAxis,\n };\n const valueAxis = {\n type: 'value' as const,\n name: config.valueLabel,\n nameLocation: 'middle' as const,\n nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,\n // Without this a vertical axis name is drawn horizontally and eats the plot's width.\n nameRotate: config.invertAxis ? 0 : 90,\n minInterval: config.integerValues ? 1 : undefined,\n };\n\n return {\n tooltip: {\n trigger: 'axis' as const,\n axisPointer: { type: 'shadow' as const },\n formatter: buildTooltipFormatter(pivot, colors, config.noValueText),\n },\n legend: { show: !config.hideLegend, bottom: 0, type: 'scroll' as const },\n grid: buildGrid(config),\n xAxis: config.invertAxis ? valueAxis : categoryAxis,\n yAxis: config.invertAxis ? categoryAxis : valueAxis,\n series: pivot.series.map((s, i) => ({\n name: s.name,\n type: 'bar' as const,\n data: s.values,\n barMinHeight: GROUPED_BAR.MIN_BAR_HEIGHT,\n itemStyle: { color: colors[i] },\n emphasis: { focus: 'series' as const },\n })),\n };\n};\n"],"names":[],"mappings":";AAaA,MAAM,EAAE,aAAa,cAAA,IAAkB;AAGvC,MAAM,aAAa,CAAC,UAClB,MAAM,QAAQ,WAAW,CAAC,SAAS,KAAK,KAAK,WAAW,CAAC,CAAC,GAAG;AAG/D,MAAM,WAAW,CAAC,MAAc,OAAe,kBAC7C,6CAAe,UAAS,aAAa,QAAQ,aAAa,MAAM;AAElE,MAAM,YAAY,CAAC,UAAkB;AACnC,QAAM,EAAE,qBAAqB,MAAM,oBAAoB,QAAQ;AAC/D,SAAO,kDAAkD,GAAG,8BAA8B,IAAI,aAAa,IAAI,uBAAuB,WAAW,KAAK,CAAC;AACzJ;AAMA,MAAM,wBACJ,CAAC,OAAwB,QAAkB,gBAAwB,CAAC,WAAoB;AACtF,QAAM,QAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAGnD,QAAM,QAAQ,+BAAO;AACrB,MAAI,SAAS,QAAQ,SAAS,MAAM,WAAW,OAAQ,QAAO;AAE9D,QAAM,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK,CAAC,CAAC;AAClD,QAAM,OAAO,QAAQ,CAAC,GAAG,MAAM;AAC7B,UAAM,QAAQ,EAAE,OAAO,KAAK;AAC5B,UAAM,OAAO,SAAS,OAAO,WAAW,WAAW,IAAI,OAAO,KAAK;AACnE,UAAM,KAAK,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AAAA,EACpE,CAAC;AAED,SAAO,MAAM,KAAK,OAAO;AAC3B;AAEF,MAAM,YAAY,CAAC,WAAmC;AACpD,QAAM,QAAQ,QAAQ,OAAO,UAAU;AACvC,SAAO;AAAA,IACL,MAAM,YAAY,QAAQ,SAAS,CAAC,OAAO,aAAa,YAAY,eAAe;AAAA,IACnF,OAAO,YAAY;AAAA,IACnB,KAAK,YAAY;AAAA;AAAA,IAEjB,QACE,YAAY,QACX,SAAS,OAAO,aAAa,YAAY,eAAe,MACxD,OAAO,aAAa,IAAI,YAAY;AAAA,IACvC,cAAc;AAAA,EAAA;AAElB;AAEO,MAAM,wBAAwB,CAAC,OAAwB,WAAmC;AAC/F,QAAM,SAAS,MAAM,OAAO,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM,GAAG,OAAO,YAAY,CAAC;AAElF,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,MAAM;AAAA;AAAA,IAEZ,SAAS,OAAO;AAAA,EAAA;AAElB,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,MAAM,OAAO;AAAA,IACb,cAAc;AAAA,IACd,SAAS,OAAO,aAAa,cAAc,IAAI,cAAc;AAAA;AAAA,IAE7D,YAAY,OAAO,aAAa,IAAI;AAAA,IACpC,aAAa,OAAO,gBAAgB,IAAI;AAAA,EAAA;AAG1C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa,EAAE,MAAM,SAAA;AAAA,MACrB,WAAW,sBAAsB,OAAO,QAAQ,OAAO,WAAW;AAAA,IAAA;AAAA,IAEpE,QAAQ,EAAE,MAAM,CAAC,OAAO,YAAY,QAAQ,GAAG,MAAM,SAAA;AAAA,IACrD,MAAM,UAAU,MAAM;AAAA,IACtB,OAAO,OAAO,aAAa,YAAY;AAAA,IACvC,OAAO,OAAO,aAAa,eAAe;AAAA,IAC1C,QAAQ,MAAM,OAAO,IAAI,CAAC,GAAG,OAAO;AAAA,MAClC,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,MAAM,EAAE;AAAA,MACR,cAAc,YAAY;AAAA,MAC1B,WAAW,EAAE,OAAO,OAAO,CAAC,EAAA;AAAA,MAC5B,UAAU,EAAE,OAAO,SAAA;AAAA,IAAkB,EACrC;AAAA,EAAA;AAEN;"}
package/dist/index80.cjs CHANGED
@@ -1,36 +1,10 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const overlay = "krc-overlay-WWw5c";
4
- const modal = "krc-modal-ZLlQ4";
5
- const resizable = "krc-resizable-G8TND";
6
- const header = "krc-header-RFEXB";
7
- const title = "krc-title-FhVKX";
8
- const headerActions = "krc-headerActions-Qj5SG";
9
- const close = "krc-close-EQ-3d";
10
- const body = "krc-body-ZLPhV";
11
- const loading = "krc-loading-lxD8d";
12
- const resizeHandle = "krc-resizeHandle-Q0J-B";
13
- const styles = {
14
- overlay,
15
- modal,
16
- resizable,
17
- header,
18
- title,
19
- headerActions,
20
- close,
21
- body,
22
- loading,
23
- resizeHandle
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const DEFAULT_LABELS = {
4
+ loading: "Loading chart...",
5
+ empty: "No data available.",
6
+ retry: "Retry",
7
+ noValue: "No data"
24
8
  };
25
- exports.body = body;
26
- exports.close = close;
27
- exports.default = styles;
28
- exports.header = header;
29
- exports.headerActions = headerActions;
30
- exports.loading = loading;
31
- exports.modal = modal;
32
- exports.overlay = overlay;
33
- exports.resizable = resizable;
34
- exports.resizeHandle = resizeHandle;
35
- exports.title = title;
9
+ exports.DEFAULT_LABELS = DEFAULT_LABELS;
36
10
  //# sourceMappingURL=index80.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index80.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index80.cjs","sources":["../src/charts/GroupedBarChartCard/defaultLabels.ts"],"sourcesContent":["import type { GroupedBarChartLabels } from './GroupedBarChartCard.types';\n\n/** English defaults, matching the texts of the other chart cards. */\nexport const DEFAULT_LABELS: GroupedBarChartLabels = {\n loading: 'Loading chart...',\n empty: 'No data available.',\n retry: 'Retry',\n noValue: 'No data',\n};\n"],"names":[],"mappings":";;AAGO,MAAM,iBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;;"}
package/dist/index80.js CHANGED
@@ -1,36 +1,10 @@
1
- const overlay = "krc-overlay-WWw5c";
2
- const modal = "krc-modal-ZLlQ4";
3
- const resizable = "krc-resizable-G8TND";
4
- const header = "krc-header-RFEXB";
5
- const title = "krc-title-FhVKX";
6
- const headerActions = "krc-headerActions-Qj5SG";
7
- const close = "krc-close-EQ-3d";
8
- const body = "krc-body-ZLPhV";
9
- const loading = "krc-loading-lxD8d";
10
- const resizeHandle = "krc-resizeHandle-Q0J-B";
11
- const styles = {
12
- overlay,
13
- modal,
14
- resizable,
15
- header,
16
- title,
17
- headerActions,
18
- close,
19
- body,
20
- loading,
21
- resizeHandle
1
+ const DEFAULT_LABELS = {
2
+ loading: "Loading chart...",
3
+ empty: "No data available.",
4
+ retry: "Retry",
5
+ noValue: "No data"
22
6
  };
23
7
  export {
24
- body,
25
- close,
26
- styles as default,
27
- header,
28
- headerActions,
29
- loading,
30
- modal,
31
- overlay,
32
- resizable,
33
- resizeHandle,
34
- title
8
+ DEFAULT_LABELS
35
9
  };
36
10
  //# sourceMappingURL=index80.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index80.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index80.js","sources":["../src/charts/GroupedBarChartCard/defaultLabels.ts"],"sourcesContent":["import type { GroupedBarChartLabels } from './GroupedBarChartCard.types';\n\n/** English defaults, matching the texts of the other chart cards. */\nexport const DEFAULT_LABELS: GroupedBarChartLabels = {\n loading: 'Loading chart...',\n empty: 'No data available.',\n retry: 'Retry',\n noValue: 'No data',\n};\n"],"names":[],"mappings":"AAGO,MAAM,iBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;"}
package/dist/index81.cjs CHANGED
@@ -1,24 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const root = "krc-root-wErEG";
4
- const list = "krc-list-Np3Qt";
5
- const page = "krc-page-znalz";
6
- const arrow = "krc-arrow-ruhgF";
7
- const isActive = "krc-isActive-azJrs";
8
- const ellipsis = "krc-ellipsis-vMrZ6";
3
+ const root = "krc-root-ij8wB";
4
+ const header = "krc-header-poY0R";
5
+ const headerText = "krc-headerText-ShzOl";
6
+ const title = "krc-title-H3VpM";
7
+ const subtitle = "krc-subtitle-n6tgG";
8
+ const headerActions = "krc-headerActions-WY-hn";
9
+ const toolbar = "krc-toolbar-lMVmb";
10
+ const chartContainer = "krc-chartContainer-nlbUx";
11
+ const loading = "krc-loading-xub77";
12
+ const empty = "krc-empty-vJ4UM";
13
+ const error = "krc-error-d-7n5";
14
+ const retryButton = "krc-retryButton-LT8qy";
9
15
  const styles = {
10
16
  root,
11
- list,
12
- page,
13
- arrow,
14
- isActive,
15
- ellipsis
17
+ header,
18
+ headerText,
19
+ title,
20
+ subtitle,
21
+ headerActions,
22
+ toolbar,
23
+ chartContainer,
24
+ loading,
25
+ empty,
26
+ error,
27
+ retryButton
16
28
  };
17
- exports.arrow = arrow;
29
+ exports.chartContainer = chartContainer;
18
30
  exports.default = styles;
19
- exports.ellipsis = ellipsis;
20
- exports.isActive = isActive;
21
- exports.list = list;
22
- exports.page = page;
31
+ exports.empty = empty;
32
+ exports.error = error;
33
+ exports.header = header;
34
+ exports.headerActions = headerActions;
35
+ exports.headerText = headerText;
36
+ exports.loading = loading;
37
+ exports.retryButton = retryButton;
23
38
  exports.root = root;
39
+ exports.subtitle = subtitle;
40
+ exports.title = title;
41
+ exports.toolbar = toolbar;
24
42
  //# sourceMappingURL=index81.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index81.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index81.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index81.js CHANGED
@@ -1,24 +1,42 @@
1
- const root = "krc-root-wErEG";
2
- const list = "krc-list-Np3Qt";
3
- const page = "krc-page-znalz";
4
- const arrow = "krc-arrow-ruhgF";
5
- const isActive = "krc-isActive-azJrs";
6
- const ellipsis = "krc-ellipsis-vMrZ6";
1
+ const root = "krc-root-ij8wB";
2
+ const header = "krc-header-poY0R";
3
+ const headerText = "krc-headerText-ShzOl";
4
+ const title = "krc-title-H3VpM";
5
+ const subtitle = "krc-subtitle-n6tgG";
6
+ const headerActions = "krc-headerActions-WY-hn";
7
+ const toolbar = "krc-toolbar-lMVmb";
8
+ const chartContainer = "krc-chartContainer-nlbUx";
9
+ const loading = "krc-loading-xub77";
10
+ const empty = "krc-empty-vJ4UM";
11
+ const error = "krc-error-d-7n5";
12
+ const retryButton = "krc-retryButton-LT8qy";
7
13
  const styles = {
8
14
  root,
9
- list,
10
- page,
11
- arrow,
12
- isActive,
13
- ellipsis
15
+ header,
16
+ headerText,
17
+ title,
18
+ subtitle,
19
+ headerActions,
20
+ toolbar,
21
+ chartContainer,
22
+ loading,
23
+ empty,
24
+ error,
25
+ retryButton
14
26
  };
15
27
  export {
16
- arrow,
28
+ chartContainer,
17
29
  styles as default,
18
- ellipsis,
19
- isActive,
20
- list,
21
- page,
22
- root
30
+ empty,
31
+ error,
32
+ header,
33
+ headerActions,
34
+ headerText,
35
+ loading,
36
+ retryButton,
37
+ root,
38
+ subtitle,
39
+ title,
40
+ toolbar
23
41
  };
24
42
  //# sourceMappingURL=index81.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index81.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index81.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}