@univers42/ui-collection 1.0.1

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 (246) hide show
  1. package/README.md +652 -0
  2. package/dist/components/blocks/ColorPickerBoard.d.ts +2 -0
  3. package/dist/components/blocks/ColorPickerBoard.d.ts.map +1 -0
  4. package/dist/components/blocks/ColorPickerBoard.js +13 -0
  5. package/dist/components/blocks/ColorPickerBoard.js.map +1 -0
  6. package/dist/components/blocks/EmojiPickerBoard.d.ts +2 -0
  7. package/dist/components/blocks/EmojiPickerBoard.d.ts.map +1 -0
  8. package/dist/components/blocks/EmojiPickerBoard.js +13 -0
  9. package/dist/components/blocks/EmojiPickerBoard.js.map +1 -0
  10. package/dist/components/blocks/IconPickerBoard.d.ts +2 -0
  11. package/dist/components/blocks/IconPickerBoard.d.ts.map +1 -0
  12. package/dist/components/blocks/IconPickerBoard.js +13 -0
  13. package/dist/components/blocks/IconPickerBoard.js.map +1 -0
  14. package/dist/components/blocks/SlashMenuIcons.d.ts +2 -0
  15. package/dist/components/blocks/SlashMenuIcons.d.ts.map +1 -0
  16. package/dist/components/blocks/SlashMenuIcons.js +2 -0
  17. package/dist/components/blocks/SlashMenuIcons.js.map +1 -0
  18. package/dist/components/blocks/SlashMenuIconsBasic.d.ts +2 -0
  19. package/dist/components/blocks/SlashMenuIconsBasic.d.ts.map +1 -0
  20. package/dist/components/blocks/SlashMenuIconsBasic.js +2 -0
  21. package/dist/components/blocks/SlashMenuIconsBasic.js.map +1 -0
  22. package/dist/components/blocks/SlashMenuIconsExtended.d.ts +2 -0
  23. package/dist/components/blocks/SlashMenuIconsExtended.d.ts.map +1 -0
  24. package/dist/components/blocks/SlashMenuIconsExtended.js +2 -0
  25. package/dist/components/blocks/SlashMenuIconsExtended.js.map +1 -0
  26. package/dist/components/blocks/slashMenuCatalog.d.ts +2 -0
  27. package/dist/components/blocks/slashMenuCatalog.d.ts.map +1 -0
  28. package/dist/components/blocks/slashMenuCatalog.js +2 -0
  29. package/dist/components/blocks/slashMenuCatalog.js.map +1 -0
  30. package/dist/library/catalogs/index.d.ts +3 -0
  31. package/dist/library/catalogs/index.d.ts.map +1 -0
  32. package/dist/library/catalogs/index.js +3 -0
  33. package/dist/library/catalogs/index.js.map +1 -0
  34. package/dist/library/catalogs/slashMenuCatalog.d.ts +17 -0
  35. package/dist/library/catalogs/slashMenuCatalog.d.ts.map +1 -0
  36. package/dist/library/catalogs/slashMenuCatalog.js +294 -0
  37. package/dist/library/catalogs/slashMenuCatalog.js.map +1 -0
  38. package/dist/library/catalogs/types.d.ts +4 -0
  39. package/dist/library/catalogs/types.d.ts.map +1 -0
  40. package/dist/library/catalogs/types.js +13 -0
  41. package/dist/library/catalogs/types.js.map +1 -0
  42. package/dist/library/components/react/analytics/formula/FormulaCharts.d.ts +22 -0
  43. package/dist/library/components/react/analytics/formula/FormulaCharts.d.ts.map +1 -0
  44. package/dist/library/components/react/analytics/formula/FormulaCharts.js +91 -0
  45. package/dist/library/components/react/analytics/formula/FormulaCharts.js.map +1 -0
  46. package/dist/library/components/react/analytics/formula/TextDistributionCard.d.ts +8 -0
  47. package/dist/library/components/react/analytics/formula/TextDistributionCard.d.ts.map +1 -0
  48. package/dist/library/components/react/analytics/formula/TextDistributionCard.js +43 -0
  49. package/dist/library/components/react/analytics/formula/TextDistributionCard.js.map +1 -0
  50. package/dist/library/components/react/analytics/formula/index.d.ts +3 -0
  51. package/dist/library/components/react/analytics/formula/index.d.ts.map +1 -0
  52. package/dist/library/components/react/analytics/formula/index.js +14 -0
  53. package/dist/library/components/react/analytics/formula/index.js.map +1 -0
  54. package/dist/library/components/react/analytics/index.d.ts +3 -0
  55. package/dist/library/components/react/analytics/index.d.ts.map +1 -0
  56. package/dist/library/components/react/analytics/index.js +14 -0
  57. package/dist/library/components/react/analytics/index.js.map +1 -0
  58. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCards.d.ts +21 -0
  59. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCards.d.ts.map +1 -0
  60. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCards.js +77 -0
  61. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCards.js.map +1 -0
  62. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCharts.d.ts +61 -0
  63. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCharts.d.ts.map +1 -0
  64. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCharts.js +58 -0
  65. package/dist/library/components/react/analytics/relation-rollup/RelationRollupCharts.js.map +1 -0
  66. package/dist/library/components/react/analytics/relation-rollup/RollupEditorHelpers.d.ts +51 -0
  67. package/dist/library/components/react/analytics/relation-rollup/RollupEditorHelpers.d.ts.map +1 -0
  68. package/dist/library/components/react/analytics/relation-rollup/RollupEditorHelpers.js +82 -0
  69. package/dist/library/components/react/analytics/relation-rollup/RollupEditorHelpers.js.map +1 -0
  70. package/dist/library/components/react/analytics/relation-rollup/index.d.ts +4 -0
  71. package/dist/library/components/react/analytics/relation-rollup/index.d.ts.map +1 -0
  72. package/dist/library/components/react/analytics/relation-rollup/index.js +15 -0
  73. package/dist/library/components/react/analytics/relation-rollup/index.js.map +1 -0
  74. package/dist/library/components/react/asset-picker/AssetPickerBoard.d.ts +20 -0
  75. package/dist/library/components/react/asset-picker/AssetPickerBoard.d.ts.map +1 -0
  76. package/dist/library/components/react/asset-picker/AssetPickerBoard.js +229 -0
  77. package/dist/library/components/react/asset-picker/AssetPickerBoard.js.map +1 -0
  78. package/dist/library/components/react/asset-picker/defaultTabs.d.ts +28 -0
  79. package/dist/library/components/react/asset-picker/defaultTabs.d.ts.map +1 -0
  80. package/dist/library/components/react/asset-picker/defaultTabs.js +104 -0
  81. package/dist/library/components/react/asset-picker/defaultTabs.js.map +1 -0
  82. package/dist/library/components/react/asset-picker/index.d.ts +4 -0
  83. package/dist/library/components/react/asset-picker/index.d.ts.map +1 -0
  84. package/dist/library/components/react/asset-picker/index.js +4 -0
  85. package/dist/library/components/react/asset-picker/index.js.map +1 -0
  86. package/dist/library/components/react/asset-picker/types.d.ts +45 -0
  87. package/dist/library/components/react/asset-picker/types.d.ts.map +1 -0
  88. package/dist/library/components/react/asset-picker/types.js +2 -0
  89. package/dist/library/components/react/asset-picker/types.js.map +1 -0
  90. package/dist/library/components/react/charts/BarCharts.d.ts +8 -0
  91. package/dist/library/components/react/charts/BarCharts.d.ts.map +1 -0
  92. package/dist/library/components/react/charts/BarCharts.js +38 -0
  93. package/dist/library/components/react/charts/BarCharts.js.map +1 -0
  94. package/dist/library/components/react/charts/DonutPieChart.d.ts +8 -0
  95. package/dist/library/components/react/charts/DonutPieChart.d.ts.map +1 -0
  96. package/dist/library/components/react/charts/DonutPieChart.js +52 -0
  97. package/dist/library/components/react/charts/DonutPieChart.js.map +1 -0
  98. package/dist/library/components/react/charts/LineChart.d.ts +7 -0
  99. package/dist/library/components/react/charts/LineChart.d.ts.map +1 -0
  100. package/dist/library/components/react/charts/LineChart.js +34 -0
  101. package/dist/library/components/react/charts/LineChart.js.map +1 -0
  102. package/dist/library/components/react/charts/MultiLineChart.d.ts +23 -0
  103. package/dist/library/components/react/charts/MultiLineChart.d.ts.map +1 -0
  104. package/dist/library/components/react/charts/MultiLineChart.js +93 -0
  105. package/dist/library/components/react/charts/MultiLineChart.js.map +1 -0
  106. package/dist/library/components/react/charts/SVGCharts.d.ts +17 -0
  107. package/dist/library/components/react/charts/SVGCharts.d.ts.map +1 -0
  108. package/dist/library/components/react/charts/SVGCharts.js +63 -0
  109. package/dist/library/components/react/charts/SVGCharts.js.map +1 -0
  110. package/dist/library/components/react/charts/chartUtils.d.ts +19 -0
  111. package/dist/library/components/react/charts/chartUtils.d.ts.map +1 -0
  112. package/dist/library/components/react/charts/chartUtils.js +64 -0
  113. package/dist/library/components/react/charts/chartUtils.js.map +1 -0
  114. package/dist/library/components/react/charts/index.d.ts +8 -0
  115. package/dist/library/components/react/charts/index.d.ts.map +1 -0
  116. package/dist/library/components/react/charts/index.js +18 -0
  117. package/dist/library/components/react/charts/index.js.map +1 -0
  118. package/dist/library/components/react/color-picker/ColorPickerBoard.d.ts +18 -0
  119. package/dist/library/components/react/color-picker/ColorPickerBoard.d.ts.map +1 -0
  120. package/dist/library/components/react/color-picker/ColorPickerBoard.js +382 -0
  121. package/dist/library/components/react/color-picker/ColorPickerBoard.js.map +1 -0
  122. package/dist/library/components/react/color-picker/index.d.ts +2 -0
  123. package/dist/library/components/react/color-picker/index.d.ts.map +1 -0
  124. package/dist/library/components/react/color-picker/index.js +13 -0
  125. package/dist/library/components/react/color-picker/index.js.map +1 -0
  126. package/dist/library/components/react/emoji-picker/EmojiPickerBoard.d.ts +14 -0
  127. package/dist/library/components/react/emoji-picker/EmojiPickerBoard.d.ts.map +1 -0
  128. package/dist/library/components/react/emoji-picker/EmojiPickerBoard.js +26 -0
  129. package/dist/library/components/react/emoji-picker/EmojiPickerBoard.js.map +1 -0
  130. package/dist/library/components/react/emoji-picker/emojiPickerData.d.ts +10 -0
  131. package/dist/library/components/react/emoji-picker/emojiPickerData.d.ts.map +1 -0
  132. package/dist/library/components/react/emoji-picker/emojiPickerData.js +27 -0
  133. package/dist/library/components/react/emoji-picker/emojiPickerData.js.map +1 -0
  134. package/dist/library/components/react/emoji-picker/index.d.ts +3 -0
  135. package/dist/library/components/react/emoji-picker/index.d.ts.map +1 -0
  136. package/dist/library/components/react/emoji-picker/index.js +14 -0
  137. package/dist/library/components/react/emoji-picker/index.js.map +1 -0
  138. package/dist/library/components/react/formula/ExampleBlock.d.ts +8 -0
  139. package/dist/library/components/react/formula/ExampleBlock.d.ts.map +1 -0
  140. package/dist/library/components/react/formula/ExampleBlock.js +41 -0
  141. package/dist/library/components/react/formula/ExampleBlock.js.map +1 -0
  142. package/dist/library/components/react/formula/index.d.ts +2 -0
  143. package/dist/library/components/react/formula/index.d.ts.map +1 -0
  144. package/dist/library/components/react/formula/index.js +13 -0
  145. package/dist/library/components/react/formula/index.js.map +1 -0
  146. package/dist/library/components/react/icon-picker/IconPickerBoard.d.ts +14 -0
  147. package/dist/library/components/react/icon-picker/IconPickerBoard.d.ts.map +1 -0
  148. package/dist/library/components/react/icon-picker/IconPickerBoard.js +26 -0
  149. package/dist/library/components/react/icon-picker/IconPickerBoard.js.map +1 -0
  150. package/dist/library/components/react/icon-picker/iconPickerData.d.ts +11 -0
  151. package/dist/library/components/react/icon-picker/iconPickerData.d.ts.map +1 -0
  152. package/dist/library/components/react/icon-picker/iconPickerData.js +52 -0
  153. package/dist/library/components/react/icon-picker/iconPickerData.js.map +1 -0
  154. package/dist/library/components/react/icon-picker/index.d.ts +3 -0
  155. package/dist/library/components/react/icon-picker/index.d.ts.map +1 -0
  156. package/dist/library/components/react/icon-picker/index.js +14 -0
  157. package/dist/library/components/react/icon-picker/index.js.map +1 -0
  158. package/dist/library/components/react/index.d.ts +10 -0
  159. package/dist/library/components/react/index.d.ts.map +1 -0
  160. package/dist/library/components/react/index.js +21 -0
  161. package/dist/library/components/react/index.js.map +1 -0
  162. package/dist/library/components/react/primitives/SettingsPrimitives.d.ts +39 -0
  163. package/dist/library/components/react/primitives/SettingsPrimitives.d.ts.map +1 -0
  164. package/dist/library/components/react/primitives/SettingsPrimitives.js +35 -0
  165. package/dist/library/components/react/primitives/SettingsPrimitives.js.map +1 -0
  166. package/dist/library/components/react/primitives/index.d.ts +2 -0
  167. package/dist/library/components/react/primitives/index.d.ts.map +1 -0
  168. package/dist/library/components/react/primitives/index.js +13 -0
  169. package/dist/library/components/react/primitives/index.js.map +1 -0
  170. package/dist/library/components/react/theme/ThemeToggle.d.ts +12 -0
  171. package/dist/library/components/react/theme/ThemeToggle.d.ts.map +1 -0
  172. package/dist/library/components/react/theme/ThemeToggle.js +57 -0
  173. package/dist/library/components/react/theme/ThemeToggle.js.map +1 -0
  174. package/dist/library/components/react/theme/index.d.ts +2 -0
  175. package/dist/library/components/react/theme/index.d.ts.map +1 -0
  176. package/dist/library/components/react/theme/index.js +13 -0
  177. package/dist/library/components/react/theme/index.js.map +1 -0
  178. package/dist/library/icons/react/cn.d.ts +2 -0
  179. package/dist/library/icons/react/cn.d.ts.map +1 -0
  180. package/dist/library/icons/react/cn.js +15 -0
  181. package/dist/library/icons/react/cn.js.map +1 -0
  182. package/dist/library/icons/react/index.d.ts +2 -0
  183. package/dist/library/icons/react/index.d.ts.map +1 -0
  184. package/dist/library/icons/react/index.js +2 -0
  185. package/dist/library/icons/react/index.js.map +1 -0
  186. package/dist/library/icons/react/slash-menu/SlashMenuIconsBasic.d.ts +20 -0
  187. package/dist/library/icons/react/slash-menu/SlashMenuIconsBasic.d.ts.map +1 -0
  188. package/dist/library/icons/react/slash-menu/SlashMenuIconsBasic.js +72 -0
  189. package/dist/library/icons/react/slash-menu/SlashMenuIconsBasic.js.map +1 -0
  190. package/dist/library/icons/react/slash-menu/SlashMenuIconsExtended.d.ts +14 -0
  191. package/dist/library/icons/react/slash-menu/SlashMenuIconsExtended.d.ts.map +1 -0
  192. package/dist/library/icons/react/slash-menu/SlashMenuIconsExtended.js +54 -0
  193. package/dist/library/icons/react/slash-menu/SlashMenuIconsExtended.js.map +1 -0
  194. package/dist/library/icons/react/slash-menu/index.d.ts +3 -0
  195. package/dist/library/icons/react/slash-menu/index.d.ts.map +1 -0
  196. package/dist/library/icons/react/slash-menu/index.js +14 -0
  197. package/dist/library/icons/react/slash-menu/index.js.map +1 -0
  198. package/dist/library/index.d.ts +11 -0
  199. package/dist/library/index.d.ts.map +1 -0
  200. package/dist/library/index.js +9 -0
  201. package/dist/library/index.js.map +1 -0
  202. package/dist/library/media/collections/emojis.d.ts +2 -0
  203. package/dist/library/media/collections/emojis.d.ts.map +1 -0
  204. package/dist/library/media/collections/emojis.js +44 -0
  205. package/dist/library/media/collections/emojis.js.map +1 -0
  206. package/dist/library/media/collections/index.d.ts +12 -0
  207. package/dist/library/media/collections/index.d.ts.map +1 -0
  208. package/dist/library/media/collections/index.js +34 -0
  209. package/dist/library/media/collections/index.js.map +1 -0
  210. package/dist/library/media/collections/other-media.d.ts +2 -0
  211. package/dist/library/media/collections/other-media.d.ts.map +1 -0
  212. package/dist/library/media/collections/other-media.js +60 -0
  213. package/dist/library/media/collections/other-media.js.map +1 -0
  214. package/dist/library/media/collections/photos.d.ts +2 -0
  215. package/dist/library/media/collections/photos.d.ts.map +1 -0
  216. package/dist/library/media/collections/photos.js +25 -0
  217. package/dist/library/media/collections/photos.js.map +1 -0
  218. package/dist/library/media/collections/svg.d.ts +2 -0
  219. package/dist/library/media/collections/svg.d.ts.map +1 -0
  220. package/dist/library/media/collections/svg.js +51 -0
  221. package/dist/library/media/collections/svg.js.map +1 -0
  222. package/dist/library/media/collections/videos.d.ts +2 -0
  223. package/dist/library/media/collections/videos.d.ts.map +1 -0
  224. package/dist/library/media/collections/videos.js +35 -0
  225. package/dist/library/media/collections/videos.js.map +1 -0
  226. package/dist/library/media/index.d.ts +6 -0
  227. package/dist/library/media/index.d.ts.map +1 -0
  228. package/dist/library/media/index.js +6 -0
  229. package/dist/library/media/index.js.map +1 -0
  230. package/dist/library/media/providers.d.ts +13 -0
  231. package/dist/library/media/providers.d.ts.map +1 -0
  232. package/dist/library/media/providers.js +39 -0
  233. package/dist/library/media/providers.js.map +1 -0
  234. package/dist/library/media/registry.d.ts +19 -0
  235. package/dist/library/media/registry.d.ts.map +1 -0
  236. package/dist/library/media/registry.js +35 -0
  237. package/dist/library/media/registry.js.map +1 -0
  238. package/dist/library/media/types.d.ts +53 -0
  239. package/dist/library/media/types.d.ts.map +1 -0
  240. package/dist/library/media/types.js +26 -0
  241. package/dist/library/media/types.js.map +1 -0
  242. package/dist/library/media/utils.d.ts +6 -0
  243. package/dist/library/media/utils.d.ts.map +1 -0
  244. package/dist/library/media/utils.js +77 -0
  245. package/dist/library/media/utils.js.map +1 -0
  246. package/package.json +143 -0
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* ************************************************************************** */
3
+ /* */
4
+ /* ::: :::::::: */
5
+ /* TextDistributionCard.tsx :+: :+: :+: */
6
+ /* +:+ +:+ +:+ */
7
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
8
+ /* +#+#+#+#+#+ +#+ */
9
+ /* Created: 2026/04/09 12:26:20 by rstancu #+# #+# */
10
+ /* Updated: 2026/04/09 12:26:20 by rstancu ### ########.fr */
11
+ /* */
12
+ /* ************************************************************************** */
13
+ import React from 'react';
14
+ import { cn } from '../../../../icons/react/cn.js';
15
+ import { DEFAULT_CHART_COLORS } from '../../charts/chartUtils.js';
16
+ function MiniDonut({ data, size = 100 }) {
17
+ const total = data.reduce((sum, [, count]) => sum + count, 0);
18
+ if (total === 0) {
19
+ return null;
20
+ }
21
+ const radius = size / 2 - 8;
22
+ const circumference = 2 * Math.PI * radius;
23
+ let cumulativePercent = 0;
24
+ return (_jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: cn('shrink-0'), children: [data.map(([label, count], index) => {
25
+ const percent = count / total;
26
+ const dasharray = `${circumference * percent} ${circumference * (1 - percent)}`;
27
+ const rotation = cumulativePercent * 360 - 90;
28
+ cumulativePercent += percent;
29
+ return (_jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length], strokeWidth: 14, strokeDasharray: dasharray, transform: `rotate(${rotation} ${size / 2} ${size / 2})` }, label));
30
+ }), _jsx("text", { x: size / 2, y: size / 2, textAnchor: "middle", dominantBaseline: "middle", className: cn('text-sm font-bold fill-fill-primary'), children: total })] }));
31
+ }
32
+ export function TextDistributionCard({ title, expression, textValues, total, }) {
33
+ const sorted = Object.entries(textValues).sort((left, right) => right[1] - left[1]);
34
+ const displayTotal = total ?? sorted.reduce((sum, [, count]) => sum + count, 0);
35
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-5'), children: [_jsxs("div", { className: cn('flex items-center gap-2 mb-1'), children: [_jsx("h3", { className: cn('text-sm font-semibold text-ink'), children: title }), _jsxs("span", { className: cn('text-[10px] text-ink-muted ml-auto'), children: [sorted.length, " distinct values"] })] }), _jsx("p", { className: cn('text-[10px] text-ink-muted font-mono truncate mb-4'), title: expression, children: expression }), _jsxs("div", { className: cn('flex items-center gap-6'), children: [_jsx(MiniDonut, { data: sorted.slice(0, 8), size: 100 }), _jsx("div", { className: cn('flex-1 flex flex-col gap-1.5 overflow-auto max-h-48'), children: sorted.slice(0, 10).map(([label, count], index) => {
36
+ const percent = displayTotal > 0 ? Math.round((count / displayTotal) * 100) : 0;
37
+ return (_jsxs("div", { children: [_jsxs("div", { className: cn('flex justify-between text-xs mb-0.5'), children: [_jsx("span", { className: cn('text-ink-body font-medium truncate max-w-[180px]'), children: label }), _jsxs("span", { className: cn('text-ink-muted tabular-nums ml-2'), children: [count, " (", percent, "%)"] })] }), _jsx("div", { className: cn('w-full bg-surface-tertiary rounded-full h-1.5'), children: _jsx("div", { className: cn('h-1.5 rounded-full transition-all'), style: {
38
+ width: `${percent}%`,
39
+ backgroundColor: DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],
40
+ } }) })] }, label));
41
+ }) })] })] }));
42
+ }
43
+ //# sourceMappingURL=TextDistributionCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextDistributionCard.js","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/formula/TextDistributionCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './FormulaCharts.js';
2
+ export * from './TextDistributionCard.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/formula/index.ts"],"names":[],"mappings":"AAYA,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /* ************************************************************************** */
2
+ /* */
3
+ /* ::: :::::::: */
4
+ /* index.ts :+: :+: :+: */
5
+ /* +:+ +:+ +:+ */
6
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
7
+ /* +#+#+#+#+#+ +#+ */
8
+ /* Created: 2026/04/09 12:26:35 by rstancu #+# #+# */
9
+ /* Updated: 2026/04/09 12:26:35 by rstancu ### ########.fr */
10
+ /* */
11
+ /* ************************************************************************** */
12
+ export * from './FormulaCharts.js';
13
+ export * from './TextDistributionCard.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/formula/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './formula/index.js';
2
+ export * from './relation-rollup/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../library/components/react/analytics/index.ts"],"names":[],"mappings":"AAYA,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /* ************************************************************************** */
2
+ /* */
3
+ /* ::: :::::::: */
4
+ /* index.ts :+: :+: :+: */
5
+ /* +:+ +:+ +:+ */
6
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
7
+ /* +#+#+#+#+#+ +#+ */
8
+ /* Created: 2026/04/09 12:28:25 by rstancu #+# #+# */
9
+ /* Updated: 2026/04/09 12:28:25 by rstancu ### ########.fr */
10
+ /* */
11
+ /* ************************************************************************** */
12
+ export * from './formula/index.js';
13
+ export * from './relation-rollup/index.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../library/components/react/analytics/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type RelationRollupValue = string | number | boolean | null | undefined | Record<string, unknown> | RelationRollupValue[];
2
+ export declare const RELATION_ROLLUP_COLORS: readonly ["var(--color-chart-1, #2563EB)", "var(--color-chart-2, #7C3AED)", "var(--color-chart-3, #EC4899)", "var(--color-chart-4, #F59E0B)", "var(--color-chart-5, #10B981)", "var(--color-chart-6, #06B6D4)", "var(--color-chart-7, #EF4444)", "var(--color-chart-8, #6366F1)", "var(--color-chart-9, #84CC16)", "var(--color-chart-10, #F97316)"];
3
+ export interface KpiCardProps {
4
+ label: string;
5
+ value: number | string;
6
+ color?: string;
7
+ className?: string;
8
+ }
9
+ export declare function KpiCard({ label, value, color, className }: Readonly<KpiCardProps>): import("react/jsx-runtime").JSX.Element;
10
+ export declare function DisplayBadge({ format, className }: Readonly<{
11
+ format: string;
12
+ className?: string;
13
+ }>): import("react/jsx-runtime").JSX.Element;
14
+ export interface RollupCellValueProps {
15
+ value: RelationRollupValue;
16
+ displayAs?: string;
17
+ barMaxValue?: number;
18
+ className?: string;
19
+ }
20
+ export declare function RollupCellValue({ value, displayAs, barMaxValue, className, }: Readonly<RollupCellValueProps>): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=RelationRollupCards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationRollupCards.d.ts","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/RelationRollupCards.tsx"],"names":[],"mappings":"AAgBA,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,mBAAmB,EAAE,CAAC;AAE1B,eAAO,MAAM,sBAAsB,sVAAuB,CAAC;AAgC3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,2CASjF;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,2CAGnG;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,SAAoB,EACpB,WAAgB,EAChB,SAAS,GACV,EAAE,QAAQ,CAAC,oBAAoB,CAAC,2CAqEhC"}
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* ************************************************************************** */
3
+ /* */
4
+ /* ::: :::::::: */
5
+ /* RelationRollupCards.tsx :+: :+: :+: */
6
+ /* +:+ +:+ +:+ */
7
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
8
+ /* +#+#+#+#+#+ +#+ */
9
+ /* Created: 2026/04/09 12:27:00 by rstancu #+# #+# */
10
+ /* Updated: 2026/04/09 12:27:00 by rstancu ### ########.fr */
11
+ /* */
12
+ /* ************************************************************************** */
13
+ import React from 'react';
14
+ import { cn } from '../../../../icons/react/cn.js';
15
+ import { DEFAULT_CHART_COLORS, safeDisplayText } from '../../charts/chartUtils.js';
16
+ export const RELATION_ROLLUP_COLORS = DEFAULT_CHART_COLORS;
17
+ const DISPLAY_BADGE_CLASSES = {
18
+ bar: 'bg-accent-soft text-accent-text',
19
+ ring: 'bg-purple-surface text-purple-text-bold',
20
+ number: 'bg-surface-tertiary text-ink-body-light',
21
+ };
22
+ function formatBoolish(value) {
23
+ if (value === true) {
24
+ return '✓';
25
+ }
26
+ if (value === false) {
27
+ return '✗';
28
+ }
29
+ return safeDisplayText(value);
30
+ }
31
+ function getRingStroke(percent) {
32
+ if (percent >= 80) {
33
+ return 'var(--color-progress-high, #10B981)';
34
+ }
35
+ if (percent >= 50) {
36
+ return 'var(--color-chart-1, #2563EB)';
37
+ }
38
+ return 'var(--color-chart-4, #F59E0B)';
39
+ }
40
+ export function KpiCard({ label, value, color, className }) {
41
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-4 shadow-sm', className), children: [_jsx("div", { className: cn('text-2xl font-bold tabular-nums'), style: color ? { color } : undefined, children: typeof value === 'number' ? value.toLocaleString() : value }), _jsx("div", { className: cn('text-xs text-ink-secondary mt-1'), children: label })] }));
42
+ }
43
+ export function DisplayBadge({ format, className }) {
44
+ const backgroundClass = DISPLAY_BADGE_CLASSES[format] ?? 'bg-surface-tertiary text-ink-body-light';
45
+ return _jsx("span", { className: cn(`px-1.5 py-0.5 rounded text-[10px] font-medium ${backgroundClass}`, className), children: format });
46
+ }
47
+ export function RollupCellValue({ value, displayAs = 'number', barMaxValue = 15, className, }) {
48
+ if (value == null) {
49
+ return _jsx("span", { className: cn('text-ink-disabled', className), children: "\u2014" });
50
+ }
51
+ if (Array.isArray(value)) {
52
+ if (value.length === 0) {
53
+ return _jsx("span", { className: cn('text-ink-disabled', className), children: "\u2205" });
54
+ }
55
+ const preview = value.slice(0, 3).map((item) => formatBoolish(item)).join(', ');
56
+ return (_jsxs("span", { className: cn('text-xs text-ink-secondary', className), title: value.map((item) => safeDisplayText(item)).join(', '), children: ["[", value.length, "] ", preview, value.length > 3 ? '…' : ''] }));
57
+ }
58
+ if (typeof value === 'boolean') {
59
+ return _jsx("span", { className: className, children: value ? '✓' : '✗' });
60
+ }
61
+ if (typeof value === 'number') {
62
+ if (displayAs === 'ring') {
63
+ const percent = Math.min(100, Math.max(0, value));
64
+ const radius = 7;
65
+ const circumference = 2 * Math.PI * radius;
66
+ const offset = circumference - (percent / 100) * circumference;
67
+ return (_jsxs("span", { className: cn('inline-flex items-center gap-1', className), children: [_jsxs("svg", { width: "18", height: "18", className: cn('-rotate-90 inline-block'), children: [_jsx("circle", { cx: "9", cy: "9", r: radius, fill: "none", stroke: "var(--color-chart-grid, #CBD5E1)", strokeWidth: "2.5" }), _jsx("circle", { cx: "9", cy: "9", r: radius, fill: "none", stroke: getRingStroke(percent), strokeWidth: "2.5", strokeLinecap: "round", strokeDasharray: circumference, strokeDashoffset: offset })] }), percent, "%"] }));
68
+ }
69
+ if (displayAs === 'bar') {
70
+ const percent = Math.min(100, (value / Math.max(barMaxValue, 1)) * 100);
71
+ return (_jsxs("span", { className: cn('inline-flex items-center gap-1 min-w-[60px]', className), children: [_jsx("span", { className: cn('inline-block w-10 h-1.5 bg-surface-tertiary rounded-full overflow-hidden'), children: _jsx("span", { className: cn('block h-full bg-accent rounded-full'), style: { width: `${percent}%` } }) }), value] }));
72
+ }
73
+ return _jsx("span", { className: className, children: value.toLocaleString() });
74
+ }
75
+ return _jsx("span", { className: cn('truncate max-w-[120px] inline-block', className), children: safeDisplayText(value) });
76
+ }
77
+ //# sourceMappingURL=RelationRollupCards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationRollupCards.js","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/RelationRollupCards.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ export interface RelationTargetSummary {
3
+ id: string;
4
+ name: string;
5
+ targetName?: string;
6
+ targetIcon?: React.ReactNode;
7
+ isTwoWay?: boolean;
8
+ totalLinks: number;
9
+ pagesWithLinks: number;
10
+ targetRecordCount?: number;
11
+ color?: string;
12
+ }
13
+ export interface RollupDistributionItem {
14
+ id?: string;
15
+ label: string;
16
+ value: number;
17
+ color?: string;
18
+ }
19
+ export interface CompletionRingItem {
20
+ id: string;
21
+ label: string;
22
+ pct: number;
23
+ icon?: React.ReactNode;
24
+ }
25
+ export interface DataFlowNode {
26
+ id: string;
27
+ name: string;
28
+ icon?: React.ReactNode;
29
+ recordCount?: number;
30
+ }
31
+ export interface DataFlowConnection {
32
+ id: string;
33
+ label: string;
34
+ totalLinks: number;
35
+ isTwoWay?: boolean;
36
+ target: DataFlowNode;
37
+ color?: string;
38
+ }
39
+ export declare function RelationMapSection({ relationTargets, totalSourceRecords, title, }: Readonly<{
40
+ relationTargets: RelationTargetSummary[];
41
+ totalSourceRecords: number;
42
+ title?: string;
43
+ }>): import("react/jsx-runtime").JSX.Element;
44
+ export declare function FunctionDistSection({ items, title, }: Readonly<{
45
+ items: RollupDistributionItem[];
46
+ title?: string;
47
+ }>): import("react/jsx-runtime").JSX.Element;
48
+ export declare function DisplayFormatSection({ items, title, }: Readonly<{
49
+ items: RollupDistributionItem[];
50
+ title?: string;
51
+ }>): import("react/jsx-runtime").JSX.Element;
52
+ export declare function CompletionRingsSection({ items, title, }: Readonly<{
53
+ items: CompletionRingItem[];
54
+ title?: string;
55
+ }>): import("react/jsx-runtime").JSX.Element;
56
+ export declare function DataFlowSection({ source, connections, title, }: Readonly<{
57
+ source: DataFlowNode;
58
+ connections: DataFlowConnection[];
59
+ title?: string;
60
+ }>): import("react/jsx-runtime").JSX.Element;
61
+ //# sourceMappingURL=RelationRollupCharts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationRollupCharts.d.ts","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/RelationRollupCharts.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsBD,wBAAgB,kBAAkB,CAAC,EACjC,eAAe,EACf,kBAAkB,EAClB,KAAkC,GACnC,EAAE,QAAQ,CAAC;IACV,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,2CA6BD;AAED,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,KAA+B,GAChC,EAAE,QAAQ,CAAC;IACV,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,2CA0BD;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,KAAyB,GAC1B,EAAE,QAAQ,CAAC;IACV,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,2CAuCD;AAED,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,KAA0B,GAC3B,EAAE,QAAQ,CAAC;IACV,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,2CAiBD;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,WAAW,EACX,KAAmB,GACpB,EAAE,QAAQ,CAAC;IACV,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,2CAyCD"}
@@ -0,0 +1,58 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* ************************************************************************** */
3
+ /* */
4
+ /* ::: :::::::: */
5
+ /* RelationRollupCharts.tsx :+: :+: :+: */
6
+ /* +:+ +:+ +:+ */
7
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
8
+ /* +#+#+#+#+#+ +#+ */
9
+ /* Created: 2026/04/09 12:27:30 by rstancu #+# #+# */
10
+ /* Updated: 2026/04/09 12:27:30 by rstancu ### ########.fr */
11
+ /* */
12
+ /* ************************************************************************** */
13
+ import React from 'react';
14
+ import { cn } from '../../../../icons/react/cn.js';
15
+ import { DEFAULT_CHART_COLORS } from '../../charts/chartUtils.js';
16
+ import { ProgressRing } from '../../charts/SVGCharts.js';
17
+ function getCompletionStroke(percent) {
18
+ if (percent >= 80) {
19
+ return 'var(--color-progress-high, #10B981)';
20
+ }
21
+ if (percent >= 50) {
22
+ return 'var(--color-chart-1, #2563EB)';
23
+ }
24
+ if (percent >= 25) {
25
+ return 'var(--color-chart-4, #F59E0B)';
26
+ }
27
+ return 'var(--color-chart-7, #EF4444)';
28
+ }
29
+ function renderIcon(icon, fallback) {
30
+ return _jsx(_Fragment, { children: icon ?? fallback });
31
+ }
32
+ export function RelationMapSection({ relationTargets, totalSourceRecords, title = 'Cross-Database Relations', }) {
33
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-5 shadow-sm'), children: [_jsx("h3", { className: cn('text-sm font-semibold text-ink-body mb-4'), children: title }), _jsx("div", { className: cn('grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3'), children: relationTargets.map((target, index) => (_jsxs("div", { className: cn('flex items-center gap-3 p-3 rounded-lg bg-surface-secondary border border-line-light'), children: [_jsx("div", { className: cn('w-9 h-9 rounded-lg flex items-center justify-center text-ink-inverse font-bold text-sm'), style: { background: target.color ?? DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length] }, children: target.name.charAt(0) }), _jsxs("div", { className: cn('flex-1 min-w-0'), children: [_jsx("div", { className: cn('text-sm font-medium text-ink-strong truncate'), children: target.name }), _jsxs("div", { className: cn('text-xs text-ink-secondary truncate'), children: ["\u2192 ", renderIcon(target.targetIcon, '📂'), " ", target.targetName ?? 'Unknown', target.isTwoWay ? _jsx("span", { className: cn('ml-1 text-accent-text-soft'), children: "\u21C4" }) : null] })] }), _jsxs("div", { className: cn('text-right shrink-0'), children: [_jsx("div", { className: cn('text-lg font-bold text-ink-strong tabular-nums'), children: target.totalLinks }), _jsxs("div", { className: cn('text-[10px] text-ink-muted'), children: [target.pagesWithLinks, "/", totalSourceRecords, " linked"] })] })] }, target.id))) })] }));
34
+ }
35
+ export function FunctionDistSection({ items, title = 'Rollup Functions Used', }) {
36
+ const total = Math.max(items.reduce((sum, item) => sum + item.value, 0), 1);
37
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-5 shadow-sm'), children: [_jsx("h3", { className: cn('text-sm font-semibold text-ink-body mb-3'), children: title }), _jsx("div", { className: cn('space-y-2'), children: [...items].sort((left, right) => right.value - left.value).map((item, index) => {
38
+ const percent = (item.value / total) * 100;
39
+ return (_jsxs("div", { className: cn('flex items-center gap-2'), children: [_jsx("span", { className: cn('text-xs text-ink-secondary w-28 truncate font-mono'), children: item.label }), _jsx("div", { className: cn('flex-1 h-3 bg-surface-tertiary rounded-full overflow-hidden'), children: _jsx("div", { className: cn('h-full rounded-full transition-all'), style: { width: `${percent}%`, background: item.color ?? DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length] } }) }), _jsx("span", { className: cn('text-xs text-ink-body-light tabular-nums w-6 text-right'), children: item.value })] }, item.id ?? item.label));
40
+ }) })] }));
41
+ }
42
+ export function DisplayFormatSection({ items, title = 'Display Formats', }) {
43
+ const total = Math.max(items.reduce((sum, item) => sum + item.value, 0), 1);
44
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-5 shadow-sm'), children: [_jsx("h3", { className: cn('text-sm font-semibold text-ink-body mb-3'), children: title }), _jsx("div", { className: cn('flex items-center justify-center gap-6 py-4 flex-wrap'), children: items.map((item, index) => {
45
+ const percent = Math.round((item.value / total) * 100);
46
+ const radius = 40;
47
+ const circumference = 2 * Math.PI * radius;
48
+ const offset = circumference - (percent / 100) * circumference;
49
+ return (_jsxs("div", { className: cn('flex flex-col items-center gap-2'), children: [_jsxs("svg", { width: "90", height: "90", className: cn('-rotate-90'), children: [_jsx("circle", { cx: "45", cy: "45", r: radius, fill: "none", stroke: "var(--color-chart-fill, #E2E8F0)", strokeWidth: "8" }), _jsx("circle", { cx: "45", cy: "45", r: radius, fill: "none", stroke: item.color ?? DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length], strokeWidth: "8", strokeLinecap: "round", strokeDasharray: circumference, strokeDashoffset: offset })] }), _jsxs("div", { className: cn('text-center -mt-1'), children: [_jsx("div", { className: cn('text-lg font-bold text-ink-strong'), children: item.value }), _jsx("div", { className: cn('text-[10px] text-ink-muted uppercase font-medium'), children: item.label })] })] }, item.id ?? item.label));
50
+ }) })] }));
51
+ }
52
+ export function CompletionRingsSection({ items, title = 'Completion Rates', }) {
53
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-5 shadow-sm'), children: [_jsx("h3", { className: cn('text-sm font-semibold text-ink-body mb-4'), children: title }), _jsx("div", { className: cn('flex flex-wrap gap-5'), children: items.map((item) => (_jsxs("div", { className: cn('flex flex-col items-center gap-1 w-20'), children: [_jsx(ProgressRing, { pct: item.pct, color: getCompletionStroke(item.pct), size: 52 }), _jsxs("span", { className: cn('text-xs font-bold text-ink-body'), children: [item.pct, "%"] }), _jsxs("span", { className: cn('text-[10px] text-ink-secondary truncate w-full text-center'), title: item.label, children: [renderIcon(item.icon, ''), " ", item.label.length > 10 ? `${item.label.slice(0, 10)}…` : item.label] })] }, item.id))) })] }));
54
+ }
55
+ export function DataFlowSection({ source, connections, title = 'Data Flow', }) {
56
+ return (_jsxs("div", { className: cn('bg-surface-primary rounded-xl border border-line p-5 shadow-sm'), children: [_jsx("h3", { className: cn('text-sm font-semibold text-ink-body mb-4'), children: title }), _jsxs("div", { className: cn('flex flex-wrap gap-4 items-start'), children: [_jsxs("div", { className: cn('flex flex-col items-center gap-3 min-w-[140px]'), children: [_jsx("div", { className: cn('w-16 h-16 rounded-2xl bg-gradient-to-br from-gradient-brand-from to-gradient-brand-to flex items-center justify-center text-2xl shadow-lg'), children: renderIcon(source.icon, '🗂️') }), _jsx("div", { className: cn('text-sm font-semibold text-ink-strong text-center'), children: source.name }), _jsxs("div", { className: cn('text-[10px] text-ink-muted'), children: [source.recordCount ?? 0, " records"] })] }), _jsx("div", { className: cn('flex-1 flex flex-wrap gap-3 ml-4'), children: connections.map((connection, index) => (_jsxs("div", { className: cn('flex items-center gap-2'), children: [_jsxs("div", { className: cn('flex flex-col items-center'), children: [_jsx("div", { className: cn('text-[10px] text-ink-muted mb-1 whitespace-nowrap'), children: connection.label }), _jsxs("div", { className: cn('w-12 h-px bg-surface-strong relative'), children: [_jsx("div", { className: cn('absolute right-0 top-1/2 -translate-y-1/2 w-0 h-0 border-l-[6px] border-l-gray-400 border-y-[3px] border-y-transparent') }), connection.isTwoWay ? (_jsx("div", { className: cn('absolute left-0 top-1/2 -translate-y-1/2 w-0 h-0 border-r-[6px] border-r-gray-400 border-y-[3px] border-y-transparent') })) : null] }), _jsxs("div", { className: cn('text-[10px] text-ink-muted mt-0.5'), children: [connection.totalLinks, " links"] })] }), _jsxs("div", { className: cn('flex flex-col items-center gap-1'), children: [_jsx("div", { className: cn('w-11 h-11 rounded-xl flex items-center justify-center text-lg shadow-sm border border-line'), style: { background: `${connection.color ?? DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length]}15` }, children: renderIcon(connection.target.icon, '📂') }), _jsx("div", { className: cn('text-xs text-ink-body-light text-center max-w-[80px] truncate'), children: connection.target.name }), _jsxs("div", { className: cn('text-[10px] text-ink-muted'), children: [connection.target.recordCount ?? 0, " records"] })] })] }, connection.id))) })] })] }));
57
+ }
58
+ //# sourceMappingURL=RelationRollupCharts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationRollupCharts.js","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/RelationRollupCharts.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ export type RollupFunctionGroup = 'Show' | 'Count' | 'Percent' | 'Math';
3
+ export type RollupDisplayAs = 'number' | 'bar' | 'ring';
4
+ export interface RollupFunctionOption {
5
+ value: string;
6
+ label: string;
7
+ group: RollupFunctionGroup;
8
+ }
9
+ export interface RollupDisplayOption {
10
+ value: RollupDisplayAs;
11
+ label: string;
12
+ icon: React.ReactNode;
13
+ }
14
+ export declare const DEFAULT_ROLLUP_FUNCTIONS: RollupFunctionOption[];
15
+ export declare const DISPLAY_OPTIONS: RollupDisplayOption[];
16
+ export declare function SectionHeader({ label }: Readonly<{
17
+ label: string;
18
+ }>): import("react/jsx-runtime").JSX.Element;
19
+ export declare function DropdownButton({ label, muted, disabled, open, onClick, }: Readonly<{
20
+ label: string;
21
+ muted?: boolean;
22
+ disabled?: boolean;
23
+ open?: boolean;
24
+ onClick: () => void;
25
+ }>): import("react/jsx-runtime").JSX.Element;
26
+ export declare function PickerList({ children, maxHeight, }: Readonly<{
27
+ children: React.ReactNode;
28
+ maxHeight?: number | string;
29
+ }>): import("react/jsx-runtime").JSX.Element;
30
+ export declare function PickerItem({ children, selected, onClick, }: Readonly<{
31
+ children: React.ReactNode;
32
+ selected?: boolean;
33
+ onClick: () => void;
34
+ }>): import("react/jsx-runtime").JSX.Element;
35
+ export declare function FunctionSelector({ value, onChange, showPicker, setShowPicker, functionOptions, }: Readonly<{
36
+ value: string;
37
+ onChange: (value: string) => void;
38
+ showPicker: boolean;
39
+ setShowPicker: (value: boolean) => void;
40
+ functionOptions?: RollupFunctionOption[];
41
+ }>): import("react/jsx-runtime").JSX.Element;
42
+ export declare function DisplaySelector({ fn, value, onChange, showPicker, setShowPicker, displayOptions, hideForFunctions, }: Readonly<{
43
+ fn?: string;
44
+ value: RollupDisplayAs;
45
+ onChange: (value: RollupDisplayAs) => void;
46
+ showPicker: boolean;
47
+ setShowPicker: (value: boolean) => void;
48
+ displayOptions?: RollupDisplayOption[];
49
+ hideForFunctions?: string[];
50
+ }>): import("react/jsx-runtime").JSX.Element | null;
51
+ //# sourceMappingURL=RollupEditorHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RollupEditorHelpers.d.ts","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/RollupEditorHelpers.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAkCD,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,EAkB1D,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBAAmB,EAIhD,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,2CAMnE;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,OAAO,GACR,EAAE,QAAQ,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC,2CAgBD;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAe,GAChB,EAAE,QAAQ,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B,CAAC,2CASD;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,QAAQ,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC,2CAcD;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,UAAU,EACV,aAAa,EACb,eAA0C,GAC3C,EAAE,QAAQ,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAC1C,CAAC,2CAwCD;AAED,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAgC,EAChC,gBAAmD,GACpD,EAAE,QAAQ,CAAC;IACV,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC,kDAkCD"}
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /* ************************************************************************** */
3
+ /* */
4
+ /* ::: :::::::: */
5
+ /* RollupEditorHelpers.tsx :+: :+: :+: */
6
+ /* +:+ +:+ +:+ */
7
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
8
+ /* +#+#+#+#+#+ +#+ */
9
+ /* Created: 2026/04/09 12:28:00 by rstancu #+# #+# */
10
+ /* Updated: 2026/04/09 12:28:00 by rstancu ### ########.fr */
11
+ /* */
12
+ /* ************************************************************************** */
13
+ import React from 'react';
14
+ import { cn } from '../../../../icons/react/cn.js';
15
+ function ChevronDownIcon({ className }) {
16
+ return (_jsx("svg", { viewBox: "0 0 16 16", className: className, fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { d: "M4 6.5l4 4 4-4", strokeLinecap: "round", strokeLinejoin: "round" }) }));
17
+ }
18
+ function HashIcon({ className }) {
19
+ return (_jsx("svg", { viewBox: "0 0 16 16", className: className, fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { d: "M5.25 2.5L4 13.5M11.75 2.5L10.5 13.5M2.5 6h11M2 10h11", strokeLinecap: "round", strokeLinejoin: "round" }) }));
20
+ }
21
+ function BarIcon({ className }) {
22
+ return (_jsx("svg", { viewBox: "0 0 16 16", className: className, fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { d: "M2.5 13.5h11M4 11V7.5M8 11V4.5M12 11V6", strokeLinecap: "round", strokeLinejoin: "round" }) }));
23
+ }
24
+ function RingIcon({ className }) {
25
+ return (_jsx("svg", { viewBox: "0 0 16 16", className: className, fill: "none", "aria-hidden": "true", children: _jsx("circle", { cx: "8", cy: "8", r: "5.5", stroke: "currentColor", strokeWidth: "2", strokeDasharray: "34.56 34.56", strokeDashoffset: "8.64" }) }));
26
+ }
27
+ export const DEFAULT_ROLLUP_FUNCTIONS = [
28
+ { value: 'show_original', label: 'Show original', group: 'Show' },
29
+ { value: 'show_unique', label: 'Show unique values', group: 'Show' },
30
+ { value: 'count_all', label: 'Count all', group: 'Count' },
31
+ { value: 'count_values', label: 'Count values', group: 'Count' },
32
+ { value: 'count_unique', label: 'Count unique values', group: 'Count' },
33
+ { value: 'count_empty', label: 'Count empty', group: 'Count' },
34
+ { value: 'count_not_empty', label: 'Count not empty', group: 'Count' },
35
+ { value: 'percent_empty', label: 'Percent empty', group: 'Percent' },
36
+ { value: 'percent_not_empty', label: 'Percent not empty', group: 'Percent' },
37
+ { value: 'percent_checked', label: 'Percent checked', group: 'Percent' },
38
+ { value: 'percent_unchecked', label: 'Percent unchecked', group: 'Percent' },
39
+ { value: 'sum', label: 'Sum', group: 'Math' },
40
+ { value: 'average', label: 'Average', group: 'Math' },
41
+ { value: 'median', label: 'Median', group: 'Math' },
42
+ { value: 'min', label: 'Minimum', group: 'Math' },
43
+ { value: 'max', label: 'Maximum', group: 'Math' },
44
+ { value: 'range', label: 'Range', group: 'Math' },
45
+ ];
46
+ export const DISPLAY_OPTIONS = [
47
+ { value: 'number', label: 'Number', icon: _jsx(HashIcon, { className: cn('w-3.5 h-3.5') }) },
48
+ { value: 'bar', label: 'Bar', icon: _jsx(BarIcon, { className: cn('w-3.5 h-3.5') }) },
49
+ { value: 'ring', label: 'Ring', icon: _jsx(RingIcon, { className: cn('w-3.5 h-3.5') }) },
50
+ ];
51
+ export function SectionHeader({ label }) {
52
+ return (_jsx("div", { className: cn('flex items-center px-3 pt-3 pb-1'), children: _jsx("span", { className: cn('text-[11px] font-semibold text-ink-muted uppercase tracking-wider'), children: label }) }));
53
+ }
54
+ export function DropdownButton({ label, muted, disabled, open, onClick, }) {
55
+ return (_jsxs("button", { type: "button", onClick: onClick, disabled: disabled, className: cn(`w-full flex items-center justify-between px-2.5 py-2 rounded-md text-sm transition-colors ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-hover-surface cursor-pointer'} ${open ? 'bg-surface-secondary' : ''}`), children: [_jsx("span", { className: cn(`truncate ${muted ? 'text-ink-muted' : 'text-ink-body'}`), children: label }), _jsx(ChevronDownIcon, { className: cn(`w-3.5 h-3.5 text-ink-muted shrink-0 transition-transform ${open ? 'rotate-180' : ''}`) })] }));
56
+ }
57
+ export function PickerList({ children, maxHeight = 192, }) {
58
+ return (_jsx("div", { className: cn('mt-1 bg-surface-secondary rounded-lg border border-line-light overflow-y-auto'), style: { maxHeight }, children: children }));
59
+ }
60
+ export function PickerItem({ children, selected, onClick, }) {
61
+ return (_jsx("button", { type: "button", onClick: onClick, className: cn(`w-full flex items-center gap-2 px-2.5 py-1.5 text-sm transition-colors ${selected ? 'bg-accent-soft text-accent-text font-medium' : 'text-ink-body hover:bg-hover-surface-white'}`), children: children }));
62
+ }
63
+ export function FunctionSelector({ value, onChange, showPicker, setShowPicker, functionOptions = DEFAULT_ROLLUP_FUNCTIONS, }) {
64
+ const selectedOption = functionOptions.find((option) => option.value === value);
65
+ return (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { label: "Calculate" }), _jsxs("div", { className: cn('px-2 pb-1'), children: [_jsx(DropdownButton, { label: selectedOption?.label ?? 'Show original', open: showPicker, onClick: () => setShowPicker(!showPicker) }), showPicker ? (_jsx(PickerList, { maxHeight: 224, children: ['Show', 'Count', 'Percent', 'Math'].map((group) => {
66
+ const items = functionOptions.filter((option) => option.group === group);
67
+ return (_jsxs(React.Fragment, { children: [_jsx("div", { className: cn('px-2 pt-2 pb-0.5 text-[10px] font-semibold text-ink-muted uppercase tracking-wider'), children: group }), items.map((option) => (_jsx(PickerItem, { selected: option.value === value, onClick: () => {
68
+ onChange(option.value);
69
+ setShowPicker(false);
70
+ }, children: _jsx("span", { className: cn('truncate'), children: option.label }) }, option.value)))] }, group));
71
+ }) })) : null] })] }));
72
+ }
73
+ export function DisplaySelector({ fn, value, onChange, showPicker, setShowPicker, displayOptions = DISPLAY_OPTIONS, hideForFunctions = ['show_original', 'show_unique'], }) {
74
+ if (fn && hideForFunctions.includes(fn)) {
75
+ return null;
76
+ }
77
+ return (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { label: "Display as" }), _jsxs("div", { className: cn('px-2 pb-2'), children: [_jsx(DropdownButton, { label: displayOptions.find((option) => option.value === value)?.label ?? 'Number', open: showPicker, onClick: () => setShowPicker(!showPicker) }), showPicker ? (_jsx(PickerList, { children: displayOptions.map((option) => (_jsxs(PickerItem, { selected: option.value === value, onClick: () => {
78
+ onChange(option.value);
79
+ setShowPicker(false);
80
+ }, children: [_jsx("span", { className: cn('text-ink-muted'), children: option.icon }), _jsx("span", { children: option.label })] }, option.value))) })) : null] })] }));
81
+ }
82
+ //# sourceMappingURL=RollupEditorHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RollupEditorHelpers.js","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/RollupEditorHelpers.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './RelationRollupCards.js';
2
+ export * from './RelationRollupCharts.js';
3
+ export * from './RollupEditorHelpers.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/index.ts"],"names":[],"mappings":"AAYA,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /* ************************************************************************** */
2
+ /* */
3
+ /* ::: :::::::: */
4
+ /* index.ts :+: :+: :+: */
5
+ /* +:+ +:+ +:+ */
6
+ /* By: rstancu <rstancu@student.42madrid.com> +#+ +:+ +#+ */
7
+ /* +#+#+#+#+#+ +#+ */
8
+ /* Created: 2026/04/09 12:28:15 by rstancu #+# #+# */
9
+ /* Updated: 2026/04/09 12:28:15 by rstancu ### ########.fr */
10
+ /* */
11
+ /* ************************************************************************** */
12
+ export * from './RelationRollupCards.js';
13
+ export * from './RelationRollupCharts.js';
14
+ export * from './RollupEditorHelpers.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../library/components/react/analytics/relation-rollup/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type DefaultAssetPickerTabsOptions } from './defaultTabs.js';
2
+ import type { AssetPickerBoardSelection, AssetPickerBoardTab, AssetPickerBoardValue } from './types.js';
3
+ export interface AssetPickerBoardProps {
4
+ tabs?: AssetPickerBoardTab[];
5
+ value?: AssetPickerBoardValue;
6
+ defaultValue?: AssetPickerBoardValue;
7
+ defaultTabId?: string;
8
+ onChange?: (selection: AssetPickerBoardSelection) => void;
9
+ onChangeComplete?: (selection: AssetPickerBoardSelection) => void;
10
+ onTabChange?: (tab: AssetPickerBoardTab) => void;
11
+ label?: string;
12
+ showSearch?: boolean;
13
+ showTabs?: boolean;
14
+ columns?: number;
15
+ width?: number | string;
16
+ className?: string;
17
+ }
18
+ export type { DefaultAssetPickerTabsOptions };
19
+ export declare function AssetPickerBoard({ tabs, value, defaultValue, defaultTabId, onChange, onChangeComplete, onTabChange, label, showSearch, showTabs, columns, width, className, }: Readonly<AssetPickerBoardProps>): import("react/jsx-runtime").JSX.Element | null;
20
+ //# sourceMappingURL=AssetPickerBoard.d.ts.map