@parto-system-design/ui 1.1.7 → 1.1.9

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 (122) hide show
  1. package/dist/{chunk-HEYMLQOV.cjs → chunk-2ACKKPWA.cjs} +22 -4
  2. package/dist/chunk-2ACKKPWA.cjs.map +1 -0
  3. package/dist/{chunk-RA5KZNG5.js → chunk-3QYYPPFJ.js} +8 -8
  4. package/dist/chunk-3QYYPPFJ.js.map +1 -0
  5. package/dist/{chunk-OEVMKFFL.cjs → chunk-4WONHORR.cjs} +47 -35
  6. package/dist/chunk-4WONHORR.cjs.map +1 -0
  7. package/dist/{chunk-NEML6RCV.js → chunk-5HCXH6GS.js} +6 -2
  8. package/dist/chunk-5HCXH6GS.js.map +1 -0
  9. package/dist/{chunk-53QY4PD3.js → chunk-GCZ6YATL.js} +38 -6
  10. package/dist/chunk-GCZ6YATL.js.map +1 -0
  11. package/dist/{chunk-GDHRYKVM.js → chunk-GPYJ66CG.js} +4 -4
  12. package/dist/chunk-GPYJ66CG.js.map +1 -0
  13. package/dist/{chunk-SCGW2BH4.cjs → chunk-HS3XI3CC.cjs} +5 -5
  14. package/dist/chunk-HS3XI3CC.cjs.map +1 -0
  15. package/dist/chunk-JCJLN437.js +108 -0
  16. package/dist/chunk-JCJLN437.js.map +1 -0
  17. package/dist/{chunk-MQGQVI3W.cjs → chunk-JMKNNH63.cjs} +39 -7
  18. package/dist/chunk-JMKNNH63.cjs.map +1 -0
  19. package/dist/{chunk-34JUCX2G.cjs → chunk-K6G63EED.cjs} +2 -4
  20. package/dist/chunk-K6G63EED.cjs.map +1 -0
  21. package/dist/{chunk-3AIJKXBV.cjs → chunk-KYM7NIJO.cjs} +200 -9
  22. package/dist/chunk-KYM7NIJO.cjs.map +1 -0
  23. package/dist/{chunk-ZZFNJR2E.js → chunk-MEKWH3GS.js} +22 -4
  24. package/dist/chunk-MEKWH3GS.js.map +1 -0
  25. package/dist/{chunk-YE477L2H.cjs → chunk-MMC6M35Q.cjs} +10 -10
  26. package/dist/chunk-MMC6M35Q.cjs.map +1 -0
  27. package/dist/{chunk-LZMCMZZF.js → chunk-NMH43BDC.js} +44 -32
  28. package/dist/chunk-NMH43BDC.js.map +1 -0
  29. package/dist/chunk-NORDUD2T.cjs +135 -0
  30. package/dist/chunk-NORDUD2T.cjs.map +1 -0
  31. package/dist/{chunk-SCX6AR53.cjs → chunk-OQB6HIUL.cjs} +5 -5
  32. package/dist/{chunk-SCX6AR53.cjs.map → chunk-OQB6HIUL.cjs.map} +1 -1
  33. package/dist/{chunk-IQHKJ4SS.js → chunk-PYURPUTV.js} +195 -6
  34. package/dist/chunk-PYURPUTV.js.map +1 -0
  35. package/dist/{chunk-AXAY64KL.js → chunk-S3T2L6NA.js} +3 -4
  36. package/dist/chunk-S3T2L6NA.js.map +1 -0
  37. package/dist/{chunk-MBCTRNTG.js → chunk-SXWSOU3Y.js} +3 -3
  38. package/dist/{chunk-MBCTRNTG.js.map → chunk-SXWSOU3Y.js.map} +1 -1
  39. package/dist/chunk-TWJXOV4C.js +145 -0
  40. package/dist/chunk-TWJXOV4C.js.map +1 -0
  41. package/dist/{chunk-P5XHPNJG.cjs → chunk-U3ADRIVO.cjs} +6 -2
  42. package/dist/chunk-U3ADRIVO.cjs.map +1 -0
  43. package/dist/chunk-UOZN45G4.cjs +130 -0
  44. package/dist/chunk-UOZN45G4.cjs.map +1 -0
  45. package/dist/chunk-VHLDOG74.cjs +167 -0
  46. package/dist/chunk-VHLDOG74.cjs.map +1 -0
  47. package/dist/{chunk-VO3B75F6.cjs → chunk-YENXXYUV.cjs} +4 -4
  48. package/dist/{chunk-VO3B75F6.cjs.map → chunk-YENXXYUV.cjs.map} +1 -1
  49. package/dist/chunk-YFQWC2PW.js +113 -0
  50. package/dist/chunk-YFQWC2PW.js.map +1 -0
  51. package/dist/{chunk-YAJWTNOX.js → chunk-ZBZDR4ZC.js} +3 -3
  52. package/dist/{chunk-YAJWTNOX.js.map → chunk-ZBZDR4ZC.js.map} +1 -1
  53. package/dist/components/charts/PartoAreaChart.cjs +3 -3
  54. package/dist/components/charts/PartoAreaChart.d.cts +2 -0
  55. package/dist/components/charts/PartoAreaChart.d.ts +2 -0
  56. package/dist/components/charts/PartoAreaChart.js +2 -2
  57. package/dist/components/charts/PartoBarChart.cjs +3 -3
  58. package/dist/components/charts/PartoBarChart.d.cts +6 -0
  59. package/dist/components/charts/PartoBarChart.d.ts +6 -0
  60. package/dist/components/charts/PartoBarChart.js +2 -2
  61. package/dist/components/charts/PartoLineChart.cjs +3 -3
  62. package/dist/components/charts/PartoLineChart.d.cts +8 -0
  63. package/dist/components/charts/PartoLineChart.d.ts +8 -0
  64. package/dist/components/charts/PartoLineChart.js +2 -2
  65. package/dist/components/charts/PartoPieChart.cjs +3 -3
  66. package/dist/components/charts/PartoPieChart.d.cts +8 -0
  67. package/dist/components/charts/PartoPieChart.d.ts +8 -0
  68. package/dist/components/charts/PartoPieChart.js +2 -2
  69. package/dist/components/ui/badge.cjs +3 -3
  70. package/dist/components/ui/badge.js +1 -1
  71. package/dist/components/ui/button.cjs +4 -4
  72. package/dist/components/ui/button.js +2 -2
  73. package/dist/components/ui/calendar.cjs +4 -4
  74. package/dist/components/ui/calendar.js +3 -3
  75. package/dist/components/ui/data-table.cjs +4 -4
  76. package/dist/components/ui/data-table.js +3 -3
  77. package/dist/components/ui/input.cjs +5 -5
  78. package/dist/components/ui/input.js +2 -2
  79. package/dist/components/ui/page-card.cjs +2 -2
  80. package/dist/components/ui/page-card.d.cts +1 -1
  81. package/dist/components/ui/page-card.d.ts +1 -1
  82. package/dist/components/ui/page-card.js +1 -1
  83. package/dist/components/ui/saved-query-card.cjs +4 -4
  84. package/dist/components/ui/saved-query-card.js +3 -3
  85. package/dist/index.cjs +5349 -3558
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.css +357 -92
  88. package/dist/index.d.cts +956 -197
  89. package/dist/index.d.ts +956 -197
  90. package/dist/index.js +5165 -3409
  91. package/dist/index.js.map +1 -1
  92. package/dist/{page-card-DOl50DqJ.d.cts → page-card-CmShVqG-.d.cts} +1 -1
  93. package/dist/{page-card-CO92oXkc.d.ts → page-card-HBn-cy4J.d.ts} +1 -1
  94. package/package.json +1 -1
  95. package/dist/chunk-34JUCX2G.cjs.map +0 -1
  96. package/dist/chunk-3AIJKXBV.cjs.map +0 -1
  97. package/dist/chunk-53QY4PD3.js.map +0 -1
  98. package/dist/chunk-7Y4V3R3Y.cjs +0 -120
  99. package/dist/chunk-7Y4V3R3Y.cjs.map +0 -1
  100. package/dist/chunk-AXAY64KL.js.map +0 -1
  101. package/dist/chunk-D5XCQDFS.js +0 -92
  102. package/dist/chunk-D5XCQDFS.js.map +0 -1
  103. package/dist/chunk-GDHRYKVM.js.map +0 -1
  104. package/dist/chunk-HEYMLQOV.cjs.map +0 -1
  105. package/dist/chunk-IQHKJ4SS.js.map +0 -1
  106. package/dist/chunk-LLJR7FV3.js +0 -135
  107. package/dist/chunk-LLJR7FV3.js.map +0 -1
  108. package/dist/chunk-LZMCMZZF.js.map +0 -1
  109. package/dist/chunk-MKYVQQBV.cjs +0 -114
  110. package/dist/chunk-MKYVQQBV.cjs.map +0 -1
  111. package/dist/chunk-MQGQVI3W.cjs.map +0 -1
  112. package/dist/chunk-NEFZJHE4.cjs +0 -157
  113. package/dist/chunk-NEFZJHE4.cjs.map +0 -1
  114. package/dist/chunk-NEML6RCV.js.map +0 -1
  115. package/dist/chunk-OEVMKFFL.cjs.map +0 -1
  116. package/dist/chunk-P5XHPNJG.cjs.map +0 -1
  117. package/dist/chunk-QJ7UB2ZQ.js +0 -98
  118. package/dist/chunk-QJ7UB2ZQ.js.map +0 -1
  119. package/dist/chunk-RA5KZNG5.js.map +0 -1
  120. package/dist/chunk-SCGW2BH4.cjs.map +0 -1
  121. package/dist/chunk-YE477L2H.cjs.map +0 -1
  122. package/dist/chunk-ZZFNJR2E.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { Skeleton } from './chunk-SB5DSYR5.js';
2
2
  import { formatLargeNumber, convertToLocalNumbers } from './chunk-4SVQNEVH.js';
3
- import * as React from 'react';
3
+ import * as React2 from 'react';
4
4
  import { useState, useEffect, useMemo } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
@@ -63,7 +63,7 @@ var FALLBACKS = {
63
63
  var CHART_FONT_FAMILY = "Yekan Bakh, system-ui, -apple-system, sans-serif";
64
64
  function useChartTheme() {
65
65
  const styles = useRootStyles();
66
- return React.useMemo(() => {
66
+ return React2.useMemo(() => {
67
67
  const getColor = (variable, fallback) => resolveCssColor(styles, variable, fallback);
68
68
  const chartColors = [
69
69
  getColor("--chart-1", FALLBACKS.chart1),
@@ -116,7 +116,7 @@ function useChartTheme() {
116
116
  };
117
117
  }, [styles]);
118
118
  }
119
- var ChartContainer = React.forwardRef(
119
+ var ChartContainer = React2.forwardRef(
120
120
  ({ className, dataSlot, ariaLabel, children }, ref) => /* @__PURE__ */ jsx(
121
121
  "div",
122
122
  {
@@ -195,6 +195,195 @@ function localeAwareNumberTick(locale) {
195
195
  function localeAwareCategoryTick(locale) {
196
196
  return (value) => convertToLocalNumbers(String(value ?? ""), locale);
197
197
  }
198
+ var PATTERN_DASHARRAY = {
199
+ solid: void 0,
200
+ dashed: "4 3",
201
+ dotted: "1 3",
202
+ "dash-dot": "4 2 1 2"
203
+ };
204
+ var ChartLegend = React2.forwardRef(
205
+ ({ className, items, orientation = "horizontal", swatchSize = 10, ...props }, ref) => {
206
+ const isVertical = orientation === "vertical";
207
+ return /* @__PURE__ */ jsx(
208
+ "div",
209
+ {
210
+ ref,
211
+ "data-slot": "chart-legend",
212
+ "data-orientation": orientation,
213
+ className,
214
+ style: {
215
+ display: "flex",
216
+ flexWrap: isVertical ? "nowrap" : "wrap",
217
+ flexDirection: isVertical ? "column" : "row",
218
+ gap: isVertical ? "6px" : "12px 16px",
219
+ fontSize: 12,
220
+ color: "hsl(var(--foreground-light))"
221
+ },
222
+ role: "list",
223
+ ...props,
224
+ children: items.map((item) => /* @__PURE__ */ jsxs(
225
+ "div",
226
+ {
227
+ role: "listitem",
228
+ "data-slot": "chart-legend-item",
229
+ style: { display: "inline-flex", alignItems: "center", gap: 6, lineHeight: 1.2 },
230
+ children: [
231
+ /* @__PURE__ */ jsx(
232
+ ChartLegendSwatch,
233
+ {
234
+ color: item.color,
235
+ shape: item.shape ?? "dot",
236
+ pattern: item.pattern ?? "solid",
237
+ size: swatchSize
238
+ }
239
+ ),
240
+ /* @__PURE__ */ jsx("span", { style: { fontWeight: 500 }, children: item.label }),
241
+ item.value !== void 0 && /* @__PURE__ */ jsx(
242
+ "span",
243
+ {
244
+ style: { marginInlineStart: 4, fontVariantNumeric: "tabular-nums", opacity: 0.7 },
245
+ "data-slot": "chart-legend-value",
246
+ children: item.value
247
+ }
248
+ )
249
+ ]
250
+ },
251
+ item.key
252
+ ))
253
+ }
254
+ );
255
+ }
256
+ );
257
+ ChartLegend.displayName = "ChartLegend";
258
+ function ChartLegendSwatch({
259
+ color,
260
+ shape,
261
+ pattern,
262
+ size
263
+ }) {
264
+ if (shape === "dot") {
265
+ return /* @__PURE__ */ jsx(
266
+ "span",
267
+ {
268
+ "aria-hidden": "true",
269
+ style: {
270
+ display: "inline-block",
271
+ width: size,
272
+ height: size,
273
+ borderRadius: "50%",
274
+ backgroundColor: color,
275
+ flexShrink: 0
276
+ }
277
+ }
278
+ );
279
+ }
280
+ if (shape === "bar") {
281
+ return /* @__PURE__ */ jsx(
282
+ "span",
283
+ {
284
+ "aria-hidden": "true",
285
+ style: {
286
+ display: "inline-block",
287
+ width: size + 4,
288
+ height: Math.max(3, Math.round(size / 2.5)),
289
+ borderRadius: 2,
290
+ backgroundColor: color,
291
+ flexShrink: 0
292
+ }
293
+ }
294
+ );
295
+ }
296
+ return /* @__PURE__ */ jsx(
297
+ "svg",
298
+ {
299
+ "aria-hidden": "true",
300
+ width: size + 8,
301
+ height: Math.max(8, Math.round(size / 1.5)),
302
+ viewBox: `0 0 ${size + 8} ${Math.max(8, Math.round(size / 1.5))}`,
303
+ style: { flexShrink: 0 },
304
+ children: /* @__PURE__ */ jsx(
305
+ "line",
306
+ {
307
+ x1: 1,
308
+ y1: Math.max(8, Math.round(size / 1.5)) / 2,
309
+ x2: size + 7,
310
+ y2: Math.max(8, Math.round(size / 1.5)) / 2,
311
+ stroke: color,
312
+ strokeWidth: 2,
313
+ strokeLinecap: "round",
314
+ strokeDasharray: PATTERN_DASHARRAY[pattern]
315
+ }
316
+ )
317
+ }
318
+ );
319
+ }
320
+ var ChartGradientLegend = React2.forwardRef(
321
+ ({
322
+ className,
323
+ startColor,
324
+ endColor,
325
+ startLabel,
326
+ endLabel,
327
+ caption,
328
+ width = 160,
329
+ height = 8,
330
+ "aria-label": ariaLabelProp,
331
+ ...props
332
+ }, ref) => {
333
+ const ariaLabel = ariaLabelProp ?? (typeof startLabel === "string" && typeof endLabel === "string" ? `${startLabel} \u062A\u0627 ${endLabel}` : "\u0645\u0642\u06CC\u0627\u0633 \u0631\u0646\u06AF");
334
+ return /* @__PURE__ */ jsxs(
335
+ "div",
336
+ {
337
+ ref,
338
+ "data-slot": "chart-gradient-legend",
339
+ className,
340
+ role: "img",
341
+ "aria-label": ariaLabel,
342
+ style: {
343
+ display: "inline-flex",
344
+ flexDirection: "column",
345
+ gap: 4,
346
+ fontSize: 12,
347
+ color: "hsl(var(--foreground-light))"
348
+ },
349
+ ...props,
350
+ children: [
351
+ caption && /* @__PURE__ */ jsx("div", { "data-slot": "chart-gradient-legend-caption", style: { fontWeight: 500 }, children: caption }),
352
+ /* @__PURE__ */ jsx(
353
+ "div",
354
+ {
355
+ "data-slot": "chart-gradient-legend-bar",
356
+ "aria-hidden": "true",
357
+ style: {
358
+ width,
359
+ height,
360
+ borderRadius: height / 2,
361
+ background: `linear-gradient(to right, ${startColor}, ${endColor})`
362
+ }
363
+ }
364
+ ),
365
+ (startLabel !== void 0 || endLabel !== void 0) && /* @__PURE__ */ jsxs(
366
+ "div",
367
+ {
368
+ style: {
369
+ display: "flex",
370
+ justifyContent: "space-between",
371
+ width,
372
+ fontVariantNumeric: "tabular-nums",
373
+ opacity: 0.85
374
+ },
375
+ children: [
376
+ /* @__PURE__ */ jsx("span", { "data-slot": "chart-gradient-legend-start", children: startLabel }),
377
+ /* @__PURE__ */ jsx("span", { "data-slot": "chart-gradient-legend-end", children: endLabel })
378
+ ]
379
+ }
380
+ )
381
+ ]
382
+ }
383
+ );
384
+ }
385
+ );
386
+ ChartGradientLegend.displayName = "ChartGradientLegend";
198
387
  function transformNivoLineData(nivoData) {
199
388
  const dataKeys = nivoData.map((s) => s.id);
200
389
  const xValues = nivoData[0]?.data.map((d) => d.x) ?? [];
@@ -208,6 +397,6 @@ function transformNivoLineData(nivoData) {
208
397
  return { data, dataKeys };
209
398
  }
210
399
 
211
- export { CHART_FONT_FAMILY, ChartContainer, ChartLoadingSkeleton, ChartTooltip, localeAwareCategoryTick, localeAwareNumberTick, transformNivoLineData, useChartTheme, useRootStyles };
212
- //# sourceMappingURL=chunk-IQHKJ4SS.js.map
213
- //# sourceMappingURL=chunk-IQHKJ4SS.js.map
400
+ export { CHART_FONT_FAMILY, ChartContainer, ChartGradientLegend, ChartLegend, ChartLoadingSkeleton, ChartTooltip, localeAwareCategoryTick, localeAwareNumberTick, transformNivoLineData, useChartTheme, useRootStyles };
401
+ //# sourceMappingURL=chunk-PYURPUTV.js.map
402
+ //# sourceMappingURL=chunk-PYURPUTV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-root-styles.ts","../src/lib/theme.ts","../src/hooks/use-chart-theme.ts","../src/components/charts/chart-utils.tsx"],"names":["React"],"mappings":"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","file":"chunk-PYURPUTV.js","sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\n\n/**\n * Returns a snapshot of the current document root computed styles and\n * re-renders when the theme class or OS color scheme changes.\n */\nexport function useRootStyles() {\n const [version, setVersion] = useState(0)\n\n useEffect(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return\n }\n\n const target = document.documentElement\n const observer = new MutationObserver(() => {\n setVersion((prev) => prev + 1)\n })\n\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n })\n\n const media = window.matchMedia('(prefers-color-scheme: dark)')\n const mediaHandler = () => setVersion((prev) => prev + 1)\n media.addEventListener('change', mediaHandler)\n\n return () => {\n observer.disconnect()\n media.removeEventListener('change', mediaHandler)\n }\n }, [])\n\n return useMemo(() => {\n if (typeof window === 'undefined' || !document?.documentElement) {\n return null\n }\n\n return getComputedStyle(document.documentElement)\n }, [version])\n}\n","const COLOR_VALUE_REGEX = /^(#|rgb|hsl|oklch)/i;\n\nexport function resolveCssColor(\n styles: CSSStyleDeclaration | null,\n variable: string,\n fallback: string,\n) {\n if (!styles) return fallback;\n const raw = styles.getPropertyValue(variable).trim();\n if (!raw) return fallback;\n if (COLOR_VALUE_REGEX.test(raw)) return raw;\n if (raw.includes('%')) return `hsl(${raw})`;\n return raw;\n}\n\n","'use client'\n\nimport * as React from 'react'\nimport { useRootStyles } from './use-root-styles'\nimport { resolveCssColor } from '@/lib/theme'\n\n/**\n * Chart theme hook — reads CSS design tokens at runtime and produces\n * resolved colors and styles for Recharts + Visx chart components.\n * Inspired by Linear, Vercel, and Stripe data visualizations.\n */\n\nconst FALLBACKS = {\n foreground: 'hsl(0 0% 98%)',\n foregroundMuted: 'hsl(0 0% 50%)',\n border: 'hsl(0 0% 22%)',\n popover: 'hsl(0 0% 10%)',\n popoverForeground: 'hsl(0 0% 98%)',\n chart1: 'hsl(153 55% 42%)',\n chart2: 'hsl(198 50% 48%)',\n chart3: 'hsl(240 40% 54%)',\n chart4: 'hsl(310 38% 52%)',\n chart5: 'hsl(355 45% 52%)',\n chart6: 'hsl(35 52% 48%)',\n chart7: 'hsl(75 38% 46%)',\n chart8: 'hsl(118 35% 46%)',\n}\n\nexport const CHART_FONT_FAMILY = 'Yekan Bakh, system-ui, -apple-system, sans-serif'\n\nexport function useChartTheme() {\n const styles = useRootStyles()\n\n return React.useMemo(() => {\n const getColor = (variable: string, fallback: string) => resolveCssColor(styles, variable, fallback)\n\n const chartColors = [\n getColor('--chart-1', FALLBACKS.chart1),\n getColor('--chart-2', FALLBACKS.chart2),\n getColor('--chart-3', FALLBACKS.chart3),\n getColor('--chart-4', FALLBACKS.chart4),\n getColor('--chart-5', FALLBACKS.chart5),\n getColor('--chart-6', FALLBACKS.chart6),\n getColor('--chart-7', FALLBACKS.chart7),\n getColor('--chart-8', FALLBACKS.chart8),\n ]\n\n const axisTickStyle = {\n fontFamily: CHART_FONT_FAMILY,\n fill: getColor('--foreground-lighter', FALLBACKS.foregroundMuted),\n fontSize: 11,\n fontWeight: 400 as const,\n }\n\n const gridStyle = {\n stroke: getColor('--border', FALLBACKS.border),\n strokeDasharray: '3 3',\n strokeOpacity: 0.15,\n }\n\n const tooltipStyle: React.CSSProperties = {\n fontFamily: CHART_FONT_FAMILY,\n background: getColor('--background-overlay-default', FALLBACKS.popover),\n color: getColor('--foreground-default', FALLBACKS.popoverForeground),\n fontSize: 12,\n lineHeight: '1.5',\n borderRadius: '10px',\n border: `1px solid ${getColor('--border-muted', FALLBACKS.border)}`,\n boxShadow: '0 4px 24px -4px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.06)',\n padding: '10px 14px',\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }\n\n const crosshairStyle = {\n stroke: getColor('--foreground-muted', FALLBACKS.foregroundMuted),\n strokeWidth: 1,\n strokeDasharray: '4 4',\n strokeOpacity: 0.5,\n }\n\n return {\n chartColors,\n getColor,\n fontFamily: CHART_FONT_FAMILY,\n axisTickStyle,\n gridStyle,\n tooltipStyle,\n crosshairStyle,\n }\n }, [styles])\n}\n","'use client'\n\nimport * as React from 'react'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { convertToLocalNumbers, formatLargeNumber, type SupportedLocale } from '@/lib/utils'\n\n// ─── Chart Container ─────────────────────────────────────────────────────────\n\ninterface ChartContainerProps {\n className?: string\n dataSlot: string\n ariaLabel?: string\n children: React.ReactNode\n}\n\nexport const ChartContainer = React.forwardRef<HTMLDivElement, ChartContainerProps>(\n ({ className, dataSlot, ariaLabel, children }, ref) => (\n <div\n ref={ref}\n className={className}\n dir=\"ltr\"\n data-slot={dataSlot}\n role=\"img\"\n aria-label={ariaLabel ?? 'نمودار'}\n style={{ position: 'relative', width: '100%', height: '100%' }}\n >\n {children}\n </div>\n )\n)\nChartContainer.displayName = 'ChartContainer'\n\n// ─── Chart Skeleton ──────────────────────────────────────────────────────────\n\ninterface ChartSkeletonProps {\n className?: string\n shape?: 'rect' | 'circle'\n}\n\nexport function ChartLoadingSkeleton({ className, shape = 'rect' }: ChartSkeletonProps) {\n return (\n <div\n data-slot=\"chart-loading-skeleton\"\n className={className}\n dir=\"ltr\"\n style={{ position: 'relative', width: '100%', height: '100%' }}\n role=\"status\"\n aria-label=\"Loading chart\"\n >\n <Skeleton\n shape={shape}\n className={\n shape === 'circle' ? 'w-full h-full min-h-[200px] aspect-square mx-auto' : 'w-full h-full min-h-[200px]'\n }\n />\n </div>\n )\n}\n\n// ─── Chart Tooltip ───────────────────────────────────────────────────────────\n\ninterface ChartTooltipProps {\n active?: boolean\n payload?: Array<{ name: string; value: number; color: string; dataKey?: string }>\n label?: string\n tooltipStyle: React.CSSProperties\n formatter?: (name: string, value: number) => React.ReactNode\n /** Locale for the default value formatter. fa/ar render Persian/Arabic digits with thousands separators; en uses Latin. */\n locale?: SupportedLocale\n}\n\nconst LOCALE_TO_BCP47: Record<SupportedLocale, string> = {\n fa: 'fa-IR',\n ar: 'ar',\n en: 'en-US',\n}\n\nexport function ChartTooltip({ active, payload, label, tooltipStyle, formatter, locale = 'fa' }: ChartTooltipProps) {\n if (!active || !payload?.length) return null\n\n const bcp47 = LOCALE_TO_BCP47[locale] ?? 'fa-IR'\n\n return (\n <div data-slot=\"chart-tooltip\" style={tooltipStyle}>\n {label && <div style={{ fontWeight: 500, fontSize: 13, marginBottom: 6 }}>{label}</div>}\n {payload.map((entry, i) => (\n <div key={i} style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: i > 0 ? 4 : 0 }}>\n <div\n style={{\n width: 10,\n height: 10,\n borderRadius: 2,\n backgroundColor: entry.color,\n flexShrink: 0,\n }}\n />\n {formatter ? (\n formatter(entry.name, entry.value)\n ) : (\n <span style={{ display: 'flex', justifyContent: 'space-between', width: '100%', gap: 16 }}>\n <span style={{ opacity: 0.7 }}>{entry.name}</span>\n <span style={{ fontWeight: 600, fontVariantNumeric: 'tabular-nums' }}>\n {typeof entry.value === 'number' ? entry.value.toLocaleString(bcp47) : entry.value}\n </span>\n </span>\n )}\n </div>\n ))}\n </div>\n )\n}\n\n// ─── Locale-aware tick formatter ─────────────────────────────────────────────\n\n/**\n * Default tickFormatter for numeric chart axes (Y axis on Line/Area/Bar, both\n * axes on Scatter, radial on Radar). Renders Persian/Arabic digits + locale\n * suffix (\"۱.۵ هزار\", \"1.5K\") for fa/ar, Latin K/M/B for en.\n *\n * Pass via `axisLeft={{ tickFormatter: localeAwareNumberTick('fa') }}`, or rely\n * on the chart wrapper's `locale` prop which wires this in by default.\n */\nexport function localeAwareNumberTick(locale: SupportedLocale): (value: unknown) => string {\n return (value) => {\n if (typeof value === 'number') return formatLargeNumber(value, locale)\n if (typeof value === 'string') {\n // Numeric strings: convert digits only (don't touch labels).\n if (/^-?\\d+(\\.\\d+)?$/.test(value)) return convertToLocalNumbers(value, locale)\n return value\n }\n return String(value ?? '')\n }\n}\n\n/**\n * Default tickFormatter for categorical chart axes — converts embedded digits\n * to the locale's numerals (e.g. \"۱۴۰۳-۰۱\" for \"1403-01\") without altering\n * letters. Use on date/time axes whose labels carry digits.\n */\nexport function localeAwareCategoryTick(locale: SupportedLocale): (value: unknown) => string {\n return (value) => convertToLocalNumbers(String(value ?? ''), locale)\n}\n\n// ─── Chart Legend ────────────────────────────────────────────────────────────\n\nexport interface ChartLegendItem {\n /** Unique identifier — typically the dataKey or series id. */\n key: string\n /** Display label. Strings preferred so AT can read it. */\n label: React.ReactNode\n /** Marker color. Pass the resolved value (hsl, hex, or `var(--token)`). */\n color: string\n /**\n * Marker shape. `dot` for categorical (Bar/Pie), `line` for series (Line/Area),\n * `bar` for stacked distributions. @default `dot`\n */\n shape?: 'dot' | 'line' | 'bar'\n /**\n * Optional stroke pattern when `shape=\"line\"`. Lets color-blind users\n * distinguish series by texture in addition to color. WCAG 1.4.1\n * (Use of Color) recommends adding a non-color signal.\n */\n pattern?: 'solid' | 'dashed' | 'dotted' | 'dash-dot'\n /** Optional trailing value (count, percent, etc.). */\n value?: React.ReactNode\n}\n\nexport interface ChartLegendProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Series to enumerate. */\n items: ChartLegendItem[]\n /** Layout — `horizontal` wraps, `vertical` stacks. @default `horizontal` */\n orientation?: 'horizontal' | 'vertical'\n /** Marker square/dot edge length in px. @default `10` */\n swatchSize?: number\n}\n\nconst PATTERN_DASHARRAY: Record<NonNullable<ChartLegendItem['pattern']>, string | undefined> = {\n solid: undefined,\n dashed: '4 3',\n dotted: '1 3',\n 'dash-dot': '4 2 1 2',\n}\n\n/**\n * Reusable chart legend. Pair with `PartoLineChart`, `PartoBarChart`, etc. by\n * passing `legend={[…]}` or rendering `<ChartLegend>` next to the chart. Each\n * line-shape entry can carry a stroke pattern so colorblind users can read\n * series identity without relying on color alone.\n *\n * The legend has no chart-aware behavior on its own — pass the same colors\n * (resolved via `useChartTheme`) you handed to the chart's `Cell`/series.\n */\nexport const ChartLegend = React.forwardRef<HTMLDivElement, ChartLegendProps>(\n ({ className, items, orientation = 'horizontal', swatchSize = 10, ...props }, ref) => {\n const isVertical = orientation === 'vertical'\n return (\n <div\n ref={ref}\n data-slot=\"chart-legend\"\n data-orientation={orientation}\n className={className}\n style={{\n display: 'flex',\n flexWrap: isVertical ? 'nowrap' : 'wrap',\n flexDirection: isVertical ? 'column' : 'row',\n gap: isVertical ? '6px' : '12px 16px',\n fontSize: 12,\n color: 'hsl(var(--foreground-light))',\n }}\n // role=list + role=listitem because we use inline elements for layout\n // (some browsers/AT strip implicit list semantics from non-li children).\n role=\"list\"\n {...props}\n >\n {items.map((item) => (\n <div\n key={item.key}\n role=\"listitem\"\n data-slot=\"chart-legend-item\"\n style={{ display: 'inline-flex', alignItems: 'center', gap: 6, lineHeight: 1.2 }}\n >\n <ChartLegendSwatch\n color={item.color}\n shape={item.shape ?? 'dot'}\n pattern={item.pattern ?? 'solid'}\n size={swatchSize}\n />\n <span style={{ fontWeight: 500 }}>{item.label}</span>\n {item.value !== undefined && (\n <span\n style={{ marginInlineStart: 4, fontVariantNumeric: 'tabular-nums', opacity: 0.7 }}\n data-slot=\"chart-legend-value\"\n >\n {item.value}\n </span>\n )}\n </div>\n ))}\n </div>\n )\n }\n)\nChartLegend.displayName = 'ChartLegend'\n\nfunction ChartLegendSwatch({\n color,\n shape,\n pattern,\n size,\n}: {\n color: string\n shape: NonNullable<ChartLegendItem['shape']>\n pattern: NonNullable<ChartLegendItem['pattern']>\n size: number\n}) {\n if (shape === 'dot') {\n return (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-block',\n width: size,\n height: size,\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n }}\n />\n )\n }\n if (shape === 'bar') {\n return (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-block',\n width: size + 4,\n height: Math.max(3, Math.round(size / 2.5)),\n borderRadius: 2,\n backgroundColor: color,\n flexShrink: 0,\n }}\n />\n )\n }\n // Line shape — SVG so we can render a stroke-dasharray pattern\n return (\n <svg\n aria-hidden=\"true\"\n width={size + 8}\n height={Math.max(8, Math.round(size / 1.5))}\n viewBox={`0 0 ${size + 8} ${Math.max(8, Math.round(size / 1.5))}`}\n style={{ flexShrink: 0 }}\n >\n <line\n x1={1}\n y1={Math.max(8, Math.round(size / 1.5)) / 2}\n x2={size + 7}\n y2={Math.max(8, Math.round(size / 1.5)) / 2}\n stroke={color}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeDasharray={PATTERN_DASHARRAY[pattern]}\n />\n </svg>\n )\n}\n\n// ─── Chart Gradient Legend ───────────────────────────────────────────────────\n\nexport interface ChartGradientLegendProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Color at the low end of the scale (e.g. background-muted). */\n startColor: string\n /** Color at the high end (e.g. brand). */\n endColor: string\n /** Optional left/start label (typically the minimum value). */\n startLabel?: React.ReactNode\n /** Optional right/end label (typically the maximum value). */\n endLabel?: React.ReactNode\n /** Optional caption above the bar (e.g. \"تراکم انتشار\"). */\n caption?: React.ReactNode\n /** Bar width in px @default 160 */\n width?: number\n /** Bar height in px @default 8 */\n height?: number\n}\n\n/**\n * Continuous-scale legend for charts whose data is encoded as color intensity\n * (HeatMap, choropleth, gradient density). Renders a horizontal gradient bar\n * with start/end labels, captioned for AT via `role=\"img\"` + `aria-label`.\n *\n * For discrete categorical legends (Line/Bar/Pie), use `<ChartLegend>` instead.\n */\nexport const ChartGradientLegend = React.forwardRef<HTMLDivElement, ChartGradientLegendProps>(\n (\n {\n className,\n startColor,\n endColor,\n startLabel,\n endLabel,\n caption,\n width = 160,\n height = 8,\n 'aria-label': ariaLabelProp,\n ...props\n },\n ref\n ) => {\n const ariaLabel =\n ariaLabelProp ??\n (typeof startLabel === 'string' && typeof endLabel === 'string' ? `${startLabel} تا ${endLabel}` : 'مقیاس رنگ')\n return (\n <div\n ref={ref}\n data-slot=\"chart-gradient-legend\"\n className={className}\n role=\"img\"\n aria-label={ariaLabel}\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: 4,\n fontSize: 12,\n color: 'hsl(var(--foreground-light))',\n }}\n {...props}\n >\n {caption && (\n <div data-slot=\"chart-gradient-legend-caption\" style={{ fontWeight: 500 }}>\n {caption}\n </div>\n )}\n <div\n data-slot=\"chart-gradient-legend-bar\"\n aria-hidden=\"true\"\n style={{\n width,\n height,\n borderRadius: height / 2,\n background: `linear-gradient(to right, ${startColor}, ${endColor})`,\n }}\n />\n {(startLabel !== undefined || endLabel !== undefined) && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n width,\n fontVariantNumeric: 'tabular-nums',\n opacity: 0.85,\n }}\n >\n <span data-slot=\"chart-gradient-legend-start\">{startLabel}</span>\n <span data-slot=\"chart-gradient-legend-end\">{endLabel}</span>\n </div>\n )}\n </div>\n )\n }\n)\nChartGradientLegend.displayName = 'ChartGradientLegend'\n\n// ─── Data Transform Utility ──────────────────────────────────────────────────\n\n/**\n * Transforms Nivo line/area data format to Recharts row-oriented format.\n * Useful for consumers migrating from Nivo data shape.\n *\n * @example\n * // Nivo: [{ id: \"فروش\", data: [{ x: \"فروردین\", y: 50 }] }]\n * // Recharts: [{ name: \"فروردین\", فروش: 50 }]\n */\nexport function transformNivoLineData(\n nivoData: Array<{ id: string; data: Array<{ x: string | number; y: number }> }>\n): { data: Array<Record<string, string | number>>; dataKeys: string[] } {\n const dataKeys = nivoData.map((s) => s.id)\n const xValues = nivoData[0]?.data.map((d) => d.x) ?? []\n\n const data = xValues.map((x, xi) => {\n const row: Record<string, string | number> = { name: x }\n for (const series of nivoData) {\n row[series.id] = series.data[xi]?.y ?? 0\n }\n return row\n })\n\n return { data, dataKeys }\n}\n"]}
@@ -32,8 +32,7 @@ var SIZE_VARIANTS = {
32
32
  lg: `${SIZE.text["lg"]} ${SIZE.padding["lg"]} ${SIZE.height["lg"]}`,
33
33
  xl: `${SIZE.text["xl"]} ${SIZE.padding["xl"]} ${SIZE.height["xl"]}`
34
34
  };
35
- var SIZE_VARIANTS_DEFAULT = "sm";
36
35
 
37
- export { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT, normalizeSize };
38
- //# sourceMappingURL=chunk-AXAY64KL.js.map
39
- //# sourceMappingURL=chunk-AXAY64KL.js.map
36
+ export { SIZE_VARIANTS, normalizeSize };
37
+ //# sourceMappingURL=chunk-S3T2L6NA.js.map
38
+ //# sourceMappingURL=chunk-S3T2L6NA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/constants.ts"],"names":[],"mappings":";AAgBO,SAAS,cAAc,IAAA,EAAkC;AAC9D,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,mBAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAI,aAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;AA2BO,IAAM,aAAA,GAAgB;AAAA,EAC3B,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AACnE","file":"chunk-S3T2L6NA.js","sourcesContent":["/**\n * Standard size scale used across the design system.\n * Components should accept these values for their `size` prop.\n */\nexport type StandardSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/** @deprecated Use `StandardSize` instead — legacy names have been removed */\nexport type LegacySize = StandardSize\n\n/** @deprecated Use `StandardSize` instead */\nexport type SizeWithLegacy = StandardSize\n\n/**\n * Normalizes a size value to standard names.\n * @deprecated All sizes are standard now — this function is a no-op passthrough.\n */\nexport function normalizeSize(size: StandardSize): StandardSize {\n return size\n}\n\nexport const SIZE = {\n text: {\n xs: 'text-xs',\n sm: 'text-sm leading-4',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n },\n padding: {\n xs: 'px-2.5 py-1',\n sm: 'px-3 py-2',\n md: 'px-4 py-2',\n lg: 'px-4 py-2',\n xl: 'px-6 py-3',\n },\n height: {\n xs: 'h-[26px]',\n sm: 'h-[34px]',\n md: 'h-[38px]',\n lg: 'h-[42px]',\n xl: 'h-[50px]',\n },\n}\n\n/** Inner sizes for nested elements (badges inside buttons, multi-select items, etc.) */\nexport const SIZE_INNER = {\n text: {\n xs: 'text-xs',\n sm: 'text-sm leading-4',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n },\n padding: {\n xs: 'px-2.5 py-1',\n sm: 'px-3 py-2',\n md: 'px-4 py-2',\n lg: 'px-4 py-2',\n xl: 'px-6 py-3',\n },\n height: {\n xs: 'h-[24px]',\n sm: 'h-[28px]',\n md: 'h-[32px]',\n lg: 'h-[36px]',\n xl: 'h-[44px]',\n },\n}\n\nexport const SIZE_VARIANTS = {\n xs: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE.height['xs']}`,\n sm: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE.height['sm']}`,\n md: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE.height['md']}`,\n lg: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE.height['lg']}`,\n xl: `${SIZE.text['xl']} ${SIZE.padding['xl']} ${SIZE.height['xl']}`,\n}\n\nexport const SIZE_VARIANTS_INNER = {\n xs: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE_INNER.height['xs']}`,\n sm: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE_INNER.height['sm']}`,\n md: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE_INNER.height['md']}`,\n lg: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE_INNER.height['lg']}`,\n xl: `${SIZE.text['xl']} ${SIZE.padding['xl']} ${SIZE_INNER.height['xl']}`,\n}\n\n/** @deprecated Use 'sm' instead */\nexport const SIZE_VARIANTS_DEFAULT = 'sm'\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-RA5KZNG5.js';
1
+ import { Button } from './chunk-3QYYPPFJ.js';
2
2
  import { cn, convertToLocalNumbers } from './chunk-4SVQNEVH.js';
3
3
  import * as React from 'react';
4
4
  import { Search, Star, Clock, Play } from 'lucide-react';
@@ -85,5 +85,5 @@ var SavedQueryCard = React.forwardRef(
85
85
  SavedQueryCard.displayName = "SavedQueryCard";
86
86
 
87
87
  export { SavedQueryCard };
88
- //# sourceMappingURL=chunk-MBCTRNTG.js.map
89
- //# sourceMappingURL=chunk-MBCTRNTG.js.map
88
+ //# sourceMappingURL=chunk-SXWSOU3Y.js.map
89
+ //# sourceMappingURL=chunk-SXWSOU3Y.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/saved-query-card.tsx"],"names":[],"mappings":"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","file":"chunk-MBCTRNTG.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Search, Play, Star, Clock } from 'lucide-react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { Button } from './button'\n\n/**\n * SavedQueryCard — saved-search tile for analyst dashboards. Shows query\n * description + filter summary chips, run count, last-run timestamp, and a\n * one-click \"run again\" action button. Optional star/favorite toggle.\n */\n\nexport interface SavedQueryFilter {\n /** Filter label (e.g., \"احساس\") */\n label: React.ReactNode\n /** Filter value (e.g., \"منفی\") */\n value: React.ReactNode\n}\n\nexport interface SavedQueryCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Saved query name */\n name: React.ReactNode\n /** Optional 1-line description */\n description?: React.ReactNode\n /** Filter chips (label + value pairs) */\n filters?: SavedQueryFilter[]\n /** Total run count */\n runCount?: number\n /** Last-run display (e.g., \"۲ روز پیش\") */\n lastRun?: React.ReactNode\n /** Run-now callback */\n onRun?: () => void\n /** Run button label override */\n runLabel?: React.ReactNode\n /** Favorite/star state. When set, renders the star toggle */\n favorite?: {\n starred: boolean\n onChange: (next: boolean) => void\n }\n /** Locale @default 'fa' */\n locale?: SupportedLocale\n}\n\nconst STRINGS: Record<SupportedLocale, { run: string; runs: string; star: string; unstar: string }> = {\n fa: { run: 'اجرا', runs: 'اجرا', star: 'علاقه‌مندی', unstar: 'حذف از علاقه‌مندی‌ها' },\n ar: { run: 'تشغيل', runs: 'تشغيل', star: 'مفضلة', unstar: 'إزالة من المفضلة' },\n en: { run: 'Run', runs: 'runs', star: 'Favorite', unstar: 'Unfavorite' },\n}\n\nconst SavedQueryCard = React.forwardRef<HTMLDivElement, SavedQueryCardProps>(\n (\n { className, name, description, filters, runCount, lastRun, onRun, runLabel, favorite, locale = 'fa', ...props },\n ref\n ) => {\n const t = STRINGS[locale] ?? STRINGS.fa\n return (\n <div\n ref={ref}\n data-slot=\"saved-query-card\"\n className={cn('flex flex-col gap-3 rounded-lg border border-border bg-background p-4', className)}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-start gap-3\">\n <Search className=\"size-4 mt-0.5 shrink-0 text-foreground-lighter\" aria-hidden=\"true\" />\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-foreground truncate\">{name}</h3>\n {description && <p className=\"mt-0.5 text-xs text-foreground-lighter line-clamp-2\">{description}</p>}\n </div>\n {favorite && (\n <button\n type=\"button\"\n onClick={() => favorite.onChange(!favorite.starred)}\n className=\"shrink-0 inline-flex size-7 items-center justify-center rounded text-foreground-lighter hover:bg-surface-100 hover:text-foreground transition-colors\"\n aria-label={favorite.starred ? t.unstar : t.star}\n aria-pressed={favorite.starred}\n data-slot=\"saved-query-card-favorite\"\n >\n <Star\n className={cn('size-4', favorite.starred && 'fill-warning-default text-warning-default')}\n aria-hidden=\"true\"\n />\n </button>\n )}\n </div>\n\n {/* Filter chips */}\n {filters && filters.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {filters.map((f, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1 rounded-md border border-border bg-background-muted/40 px-2 py-0.5 text-2xs\"\n data-slot=\"saved-query-card-filter\"\n >\n <span className=\"text-foreground-lighter\">{f.label}:</span>\n <span className=\"text-foreground font-medium\">{f.value}</span>\n </span>\n ))}\n </div>\n )}\n\n {/* Footer — meta + run button */}\n <div className=\"flex items-center justify-between gap-2 pt-2 border-t border-border\">\n <div className=\"flex items-center gap-3 text-2xs text-foreground-lighter\">\n {typeof runCount === 'number' && (\n <span className=\"tabular-nums\">\n {convertToLocalNumbers(runCount, locale)} {t.runs}\n </span>\n )}\n {lastRun && (\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"size-3\" aria-hidden=\"true\" />\n {lastRun}\n </span>\n )}\n </div>\n {onRun && (\n <Button size=\"sm\" variant=\"outline\" onClick={onRun} className=\"gap-1.5\" data-slot=\"saved-query-card-run\">\n <Play className=\"size-3\" aria-hidden=\"true\" />\n {runLabel ?? t.run}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\nSavedQueryCard.displayName = 'SavedQueryCard'\n\nexport { SavedQueryCard }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/saved-query-card.tsx"],"names":[],"mappings":"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","file":"chunk-SXWSOU3Y.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Search, Play, Star, Clock } from 'lucide-react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { Button } from './button'\n\n/**\n * SavedQueryCard — saved-search tile for analyst dashboards. Shows query\n * description + filter summary chips, run count, last-run timestamp, and a\n * one-click \"run again\" action button. Optional star/favorite toggle.\n */\n\nexport interface SavedQueryFilter {\n /** Filter label (e.g., \"احساس\") */\n label: React.ReactNode\n /** Filter value (e.g., \"منفی\") */\n value: React.ReactNode\n}\n\nexport interface SavedQueryCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Saved query name */\n name: React.ReactNode\n /** Optional 1-line description */\n description?: React.ReactNode\n /** Filter chips (label + value pairs) */\n filters?: SavedQueryFilter[]\n /** Total run count */\n runCount?: number\n /** Last-run display (e.g., \"۲ روز پیش\") */\n lastRun?: React.ReactNode\n /** Run-now callback */\n onRun?: () => void\n /** Run button label override */\n runLabel?: React.ReactNode\n /** Favorite/star state. When set, renders the star toggle */\n favorite?: {\n starred: boolean\n onChange: (next: boolean) => void\n }\n /** Locale @default 'fa' */\n locale?: SupportedLocale\n}\n\nconst STRINGS: Record<SupportedLocale, { run: string; runs: string; star: string; unstar: string }> = {\n fa: { run: 'اجرا', runs: 'اجرا', star: 'علاقه‌مندی', unstar: 'حذف از علاقه‌مندی‌ها' },\n ar: { run: 'تشغيل', runs: 'تشغيل', star: 'مفضلة', unstar: 'إزالة من المفضلة' },\n en: { run: 'Run', runs: 'runs', star: 'Favorite', unstar: 'Unfavorite' },\n}\n\nconst SavedQueryCard = React.forwardRef<HTMLDivElement, SavedQueryCardProps>(\n (\n { className, name, description, filters, runCount, lastRun, onRun, runLabel, favorite, locale = 'fa', ...props },\n ref\n ) => {\n const t = STRINGS[locale] ?? STRINGS.fa\n return (\n <div\n ref={ref}\n data-slot=\"saved-query-card\"\n className={cn('flex flex-col gap-3 rounded-lg border border-border bg-background p-4', className)}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-start gap-3\">\n <Search className=\"size-4 mt-0.5 shrink-0 text-foreground-lighter\" aria-hidden=\"true\" />\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-foreground truncate\">{name}</h3>\n {description && <p className=\"mt-0.5 text-xs text-foreground-lighter line-clamp-2\">{description}</p>}\n </div>\n {favorite && (\n <button\n type=\"button\"\n onClick={() => favorite.onChange(!favorite.starred)}\n className=\"shrink-0 inline-flex size-7 items-center justify-center rounded text-foreground-lighter hover:bg-surface-100 hover:text-foreground transition-colors\"\n aria-label={favorite.starred ? t.unstar : t.star}\n aria-pressed={favorite.starred}\n data-slot=\"saved-query-card-favorite\"\n >\n <Star\n className={cn('size-4', favorite.starred && 'fill-warning-default text-warning-default')}\n aria-hidden=\"true\"\n />\n </button>\n )}\n </div>\n\n {/* Filter chips */}\n {filters && filters.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {filters.map((f, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1 rounded-md border border-border bg-background-muted/40 px-2 py-0.5 text-2xs\"\n data-slot=\"saved-query-card-filter\"\n >\n <span className=\"text-foreground-lighter\">{f.label}:</span>\n <span className=\"text-foreground font-medium\">{f.value}</span>\n </span>\n ))}\n </div>\n )}\n\n {/* Footer — meta + run button */}\n <div className=\"flex items-center justify-between gap-2 pt-2 border-t border-border\">\n <div className=\"flex items-center gap-3 text-2xs text-foreground-lighter\">\n {typeof runCount === 'number' && (\n <span className=\"tabular-nums\">\n {convertToLocalNumbers(runCount, locale)} {t.runs}\n </span>\n )}\n {lastRun && (\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"size-3\" aria-hidden=\"true\" />\n {lastRun}\n </span>\n )}\n </div>\n {onRun && (\n <Button size=\"sm\" variant=\"outline\" onClick={onRun} className=\"gap-1.5\" data-slot=\"saved-query-card-run\">\n <Play className=\"size-3\" aria-hidden=\"true\" />\n {runLabel ?? t.run}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\nSavedQueryCard.displayName = 'SavedQueryCard'\n\nexport { SavedQueryCard }\n"]}
@@ -0,0 +1,145 @@
1
+ import { useChartTheme, localeAwareCategoryTick, localeAwareNumberTick, ChartLoadingSkeleton, ChartContainer, ChartTooltip, ChartLegend } from './chunk-PYURPUTV.js';
2
+ import * as React from 'react';
3
+ import { ResponsiveContainer, BarChart, CartesianGrid, XAxis, YAxis, Tooltip, Bar } from 'recharts';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+
6
+ var PartoBarChart = React.forwardRef(function PartoBarChart2({
7
+ data,
8
+ keys,
9
+ indexBy,
10
+ groupMode = "grouped",
11
+ layout = "vertical",
12
+ margin = { top: 20, right: 20, bottom: 50, left: 50 },
13
+ barCategoryGap = "35%",
14
+ barGap = 2,
15
+ radius = [6, 6, 0, 0],
16
+ enableGridY = true,
17
+ enableGridX = false,
18
+ enableLabel = false,
19
+ axisBottom,
20
+ axisLeft,
21
+ tooltipFormatter,
22
+ locale = "fa",
23
+ className,
24
+ isLoading = false,
25
+ ariaLabel,
26
+ chartProps,
27
+ legend = false
28
+ }, ref) {
29
+ const { chartColors, axisTickStyle, gridStyle, tooltipStyle } = useChartTheme();
30
+ const categoryTick = React.useMemo(() => localeAwareCategoryTick(locale), [locale]);
31
+ const numberTick = React.useMemo(() => localeAwareNumberTick(locale), [locale]);
32
+ if (isLoading) {
33
+ return /* @__PURE__ */ jsx(ChartLoadingSkeleton, { className });
34
+ }
35
+ const rechartsLayout = layout === "horizontal" ? "vertical" : "horizontal";
36
+ const stackId = groupMode === "stacked" ? "stack" : void 0;
37
+ const legendItems = legend ? keys.map((key, i) => ({
38
+ key,
39
+ label: key,
40
+ color: chartColors[i % chartColors.length],
41
+ shape: "bar"
42
+ })) : [];
43
+ return /* @__PURE__ */ jsx(ChartContainer, { ref, className, dataSlot: "bar-chart", ariaLabel, children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", width: "100%", height: "100%" }, children: [
44
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, minHeight: 0 }, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxs(
45
+ BarChart,
46
+ {
47
+ data,
48
+ layout: rechartsLayout,
49
+ margin,
50
+ barCategoryGap,
51
+ barGap,
52
+ ...chartProps,
53
+ children: [
54
+ (enableGridX || enableGridY) && /* @__PURE__ */ jsx(
55
+ CartesianGrid,
56
+ {
57
+ horizontal: enableGridY,
58
+ vertical: enableGridX,
59
+ stroke: gridStyle.stroke,
60
+ strokeDasharray: gridStyle.strokeDasharray,
61
+ strokeOpacity: gridStyle.strokeOpacity
62
+ }
63
+ ),
64
+ rechartsLayout === "horizontal" ? /* @__PURE__ */ jsxs(Fragment, { children: [
65
+ axisBottom !== null && /* @__PURE__ */ jsx(
66
+ XAxis,
67
+ {
68
+ dataKey: indexBy,
69
+ tick: axisTickStyle,
70
+ tickLine: false,
71
+ axisLine: false,
72
+ tickMargin: 12,
73
+ tickFormatter: categoryTick,
74
+ ...axisBottom
75
+ }
76
+ ),
77
+ axisLeft !== null && /* @__PURE__ */ jsx(
78
+ YAxis,
79
+ {
80
+ tick: axisTickStyle,
81
+ tickLine: false,
82
+ axisLine: false,
83
+ tickMargin: 12,
84
+ tickFormatter: numberTick,
85
+ ...axisLeft
86
+ }
87
+ )
88
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
89
+ axisLeft !== null && /* @__PURE__ */ jsx(
90
+ YAxis,
91
+ {
92
+ dataKey: indexBy,
93
+ type: "category",
94
+ tick: axisTickStyle,
95
+ tickLine: false,
96
+ axisLine: false,
97
+ tickMargin: 12,
98
+ tickFormatter: categoryTick,
99
+ ...axisLeft
100
+ }
101
+ ),
102
+ axisBottom !== null && /* @__PURE__ */ jsx(
103
+ XAxis,
104
+ {
105
+ type: "number",
106
+ tick: axisTickStyle,
107
+ tickLine: false,
108
+ axisLine: false,
109
+ tickMargin: 12,
110
+ tickFormatter: numberTick,
111
+ ...axisBottom
112
+ }
113
+ )
114
+ ] }),
115
+ /* @__PURE__ */ jsx(
116
+ Tooltip,
117
+ {
118
+ cursor: { fill: "hsl(0 0% 50% / 0.05)" },
119
+ content: /* @__PURE__ */ jsx(ChartTooltip, { tooltipStyle, formatter: tooltipFormatter, locale })
120
+ }
121
+ ),
122
+ keys.map((key, i) => /* @__PURE__ */ jsx(
123
+ Bar,
124
+ {
125
+ dataKey: key,
126
+ fill: chartColors[i % chartColors.length],
127
+ radius,
128
+ stackId,
129
+ label: enableLabel ? { position: "top", style: axisTickStyle } : false,
130
+ animationDuration: 800,
131
+ animationEasing: "ease-out"
132
+ },
133
+ key
134
+ ))
135
+ ]
136
+ }
137
+ ) }) }),
138
+ legend && /* @__PURE__ */ jsx(ChartLegend, { items: legendItems, style: { paddingTop: 12 } })
139
+ ] }) });
140
+ });
141
+ PartoBarChart.displayName = "PartoBarChart";
142
+
143
+ export { PartoBarChart };
144
+ //# sourceMappingURL=chunk-TWJXOV4C.js.map
145
+ //# sourceMappingURL=chunk-TWJXOV4C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/charts/PartoBarChart.tsx"],"names":["PartoBarChart"],"mappings":"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","file":"chunk-TWJXOV4C.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'\n\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { type SupportedLocale } from '@/lib/utils'\nimport {\n ChartContainer,\n ChartLegend,\n ChartLoadingSkeleton,\n ChartTooltip,\n localeAwareCategoryTick,\n localeAwareNumberTick,\n type ChartLegendItem,\n} from './chart-utils'\n\nexport interface PartoBarChartProps {\n /** Chart data — row-oriented array of objects */\n data: Array<Record<string, any>>\n /** Data keys to render as bars (e.g. ['فروش', 'هزینه']) */\n keys: string[]\n /** Field name used for X axis categories (e.g. 'ماه') */\n indexBy: string\n /** Stacked or grouped layout */\n groupMode?: 'grouped' | 'stacked'\n /** Bar layout direction */\n layout?: 'vertical' | 'horizontal'\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Gap between category groups as percentage */\n barCategoryGap?: string | number\n /** Gap between bars within a group */\n barGap?: number\n /** Border radius for bar tops [topLeft, topRight, bottomRight, bottomLeft] */\n radius?: [number, number, number, number]\n /** Show horizontal grid lines */\n enableGridY?: boolean\n /** Show vertical grid lines */\n enableGridX?: boolean\n /** Show labels inside bars */\n enableLabel?: boolean\n /** Custom X axis config */\n axisBottom?: Record<string, any> | null\n /** Custom Y axis config */\n axisLeft?: Record<string, any> | null\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n /**\n * Locale for digit formatting in tooltips and axis ticks. fa/ar render\n * Persian/Arabic digits with locale suffixes; en uses Latin K/M/B.\n * Default: 'fa'.\n */\n locale?: SupportedLocale\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n /** Additional Recharts BarChart props */\n chartProps?: Record<string, any>\n /**\n * Render a legend below the chart that names each series with a colored\n * marker. Strongly recommended for grouped or stacked layouts where\n * series identity is otherwise color-only. @default `false`\n */\n legend?: boolean\n}\n\nexport const PartoBarChart = React.forwardRef<HTMLDivElement, PartoBarChartProps>(function PartoBarChart(\n {\n data,\n keys,\n indexBy,\n groupMode = 'grouped',\n layout = 'vertical',\n margin = { top: 20, right: 20, bottom: 50, left: 50 },\n barCategoryGap = '35%',\n barGap = 2,\n radius = [6, 6, 0, 0],\n enableGridY = true,\n enableGridX = false,\n enableLabel = false,\n axisBottom,\n axisLeft,\n tooltipFormatter,\n locale = 'fa',\n className,\n isLoading = false,\n ariaLabel,\n chartProps,\n legend = false,\n },\n ref\n) {\n const { chartColors, axisTickStyle, gridStyle, tooltipStyle } = useChartTheme()\n const categoryTick = React.useMemo(() => localeAwareCategoryTick(locale), [locale])\n const numberTick = React.useMemo(() => localeAwareNumberTick(locale), [locale])\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n // Recharts uses \"horizontal\" for standard vertical bars and \"vertical\" for horizontal bars\n const rechartsLayout = layout === 'horizontal' ? 'vertical' : 'horizontal'\n const stackId = groupMode === 'stacked' ? 'stack' : undefined\n\n const legendItems: ChartLegendItem[] = legend\n ? keys.map((key, i) => ({\n key,\n label: key,\n color: chartColors[i % chartColors.length],\n shape: 'bar',\n }))\n : []\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"bar-chart\" ariaLabel={ariaLabel}>\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%', height: '100%' }}>\n <div style={{ flex: 1, minHeight: 0 }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart\n data={data}\n layout={rechartsLayout}\n margin={margin}\n barCategoryGap={barCategoryGap}\n barGap={barGap}\n {...chartProps}\n >\n {(enableGridX || enableGridY) && (\n <CartesianGrid\n horizontal={enableGridY}\n vertical={enableGridX}\n stroke={gridStyle.stroke}\n strokeDasharray={gridStyle.strokeDasharray}\n strokeOpacity={gridStyle.strokeOpacity}\n />\n )}\n\n {rechartsLayout === 'horizontal' ? (\n <>\n {axisBottom !== null && (\n <XAxis\n dataKey={indexBy}\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={categoryTick}\n {...axisBottom}\n />\n )}\n {axisLeft !== null && (\n <YAxis\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={numberTick}\n {...axisLeft}\n />\n )}\n </>\n ) : (\n <>\n {axisLeft !== null && (\n <YAxis\n dataKey={indexBy}\n type=\"category\"\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={categoryTick}\n {...axisLeft}\n />\n )}\n {axisBottom !== null && (\n <XAxis\n type=\"number\"\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={numberTick}\n {...axisBottom}\n />\n )}\n </>\n )}\n\n <Tooltip\n cursor={{ fill: 'hsl(0 0% 50% / 0.05)' }}\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} locale={locale} />}\n />\n\n {keys.map((key, i) => (\n <Bar\n key={key}\n dataKey={key}\n fill={chartColors[i % chartColors.length]}\n radius={radius}\n stackId={stackId}\n label={enableLabel ? { position: 'top', style: axisTickStyle } : false}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n </div>\n {legend && <ChartLegend items={legendItems} style={{ paddingTop: 12 }} />}\n </div>\n </ChartContainer>\n )\n})\nPartoBarChart.displayName = 'PartoBarChart'\n"]}
@@ -55,6 +55,10 @@ var PLATFORM_META = {
55
55
  threads: {
56
56
  label: "Threads",
57
57
  icon: ({ className }) => /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.868 1.205 8.617.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.749-1.752-2.98-.065-1.19.388-2.285 1.277-3.086.84-.754 2.02-1.164 3.43-1.19.954-.018 1.858.09 2.695.322-.082-.858-.372-1.502-.861-1.903-.529-.434-1.32-.658-2.332-.67-.884.01-1.63.23-2.22.65l-1.11-1.75c.97-.625 2.18-.95 3.6-.97h.022c1.63.02 2.976.497 3.898 1.385.955.92 1.444 2.25 1.51 3.95.23.073.46.149.682.232 1.69.64 2.847 1.635 3.406 2.946.859 2.002.86 5.139-1.773 7.674-1.797 1.742-3.993 2.525-6.935 2.545zm.098-10.02c-.745.01-1.377.186-1.882.523-.443.298-.706.733-.67 1.215.03.564.342 1.017.876 1.275.516.25 1.087.299 1.58.127.684-.24 1.34-.93 1.614-2.366a9.68 9.68 0 00-1.518-.774z" }) })
58
+ },
59
+ facebook: {
60
+ label: "Facebook",
61
+ icon: ({ className }) => /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.875v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }) })
58
62
  }
59
63
  };
60
64
  var socialPlatformBadgeVariants = classVarianceAuthority.cva("inline-flex items-center font-medium transition-colors duration-150", {
@@ -426,5 +430,5 @@ exports.BotDetectionMeter = BotDetectionMeter;
426
430
  exports.PageCard = PageCard;
427
431
  exports.SocialPlatformBadge = SocialPlatformBadge;
428
432
  exports.socialPlatformBadgeVariants = socialPlatformBadgeVariants;
429
- //# sourceMappingURL=chunk-P5XHPNJG.cjs.map
430
- //# sourceMappingURL=chunk-P5XHPNJG.cjs.map
433
+ //# sourceMappingURL=chunk-U3ADRIVO.cjs.map
434
+ //# sourceMappingURL=chunk-U3ADRIVO.cjs.map