design-zystem 1.0.252 → 1.0.254

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.
package/dist/index.d.mts CHANGED
@@ -32,6 +32,8 @@ interface BoxProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {
32
32
  justifyContent?: string;
33
33
  borderRadius?: string;
34
34
  border?: string;
35
+ /** Colored left accent bar (status/score encoding), painted over the box border. */
36
+ borderColor?: string;
35
37
  style?: CSSProperties;
36
38
  }
37
39
  declare const Box: ({ children, hasShadow, ...rest }: BoxProps) => react_jsx_runtime.JSX.Element;
@@ -247,6 +249,7 @@ interface IconProps {
247
249
  height?: string;
248
250
  backgroundColor?: string;
249
251
  isRound?: boolean;
252
+ shadow?: string;
250
253
  onClick?: () => void;
251
254
  className?: string;
252
255
  style?: CSSProperties;
@@ -294,6 +297,10 @@ interface LinkProps {
294
297
  }
295
298
  declare const Link: ({ children, url, newTab, download, size, variant, ...rest }: LinkProps) => react_jsx_runtime.JSX.Element;
296
299
 
300
+ interface AvatarBadge {
301
+ name: string;
302
+ family?: 'solid' | 'regular' | 'light' | 'brands';
303
+ }
297
304
  interface AvatarProps {
298
305
  name: string;
299
306
  src?: string | null;
@@ -301,8 +308,9 @@ interface AvatarProps {
301
308
  textColor?: string;
302
309
  size?: number;
303
310
  shape?: 'circle' | 'square';
311
+ badge?: AvatarBadge | null;
304
312
  }
305
- declare const Avatar: ({ name, src, backgroundColor, textColor, size, shape, }: AvatarProps) => react_jsx_runtime.JSX.Element;
313
+ declare const Avatar: ({ name, src, backgroundColor, textColor, size, shape, badge, }: AvatarProps) => react_jsx_runtime.JSX.Element;
306
314
 
307
315
  interface ButtonProps extends HTMLAttributes<HTMLButtonElement> {
308
316
  label?: string;
@@ -974,35 +982,6 @@ interface TimelineProps {
974
982
  */
975
983
  declare const Timeline: ({ items, lineColor, emptyLabel, }: TimelineProps) => react_jsx_runtime.JSX.Element;
976
984
 
977
- interface BorderedRowProps {
978
- /** Accent color (DZ color token) — used to encode a score/status/level. */
979
- borderColor?: string;
980
- /** Accent thickness in px. */
981
- borderWidth?: number;
982
- /** Background color (DZ color token). */
983
- background?: string;
984
- /** Inner padding. */
985
- padding?: string;
986
- /** Corner radius — pass "0" for flush table rows, default rounded card. */
987
- borderRadius?: string;
988
- /**
989
- * Accent style:
990
- * - 'edge' (default): full-height colored left border (flush rows / score bars).
991
- * - 'bar': short rounded inset accent bar, centered (white card look).
992
- */
993
- accent?: 'edge' | 'bar';
994
- /** Subtle 1px full border around the card (card look). */
995
- bordered?: boolean;
996
- children: ReactNode;
997
- onClick?: () => void;
998
- }
999
- /**
1000
- * Row/card with a colored accent, used to encode a status (recovery score,
1001
- * feedback level…). Flush table rows: accent="edge" + borderRadius="0".
1002
- * White cards: accent="bar" + bordered + background.
1003
- */
1004
- declare const BorderedRow: ({ borderColor, borderWidth, background, padding, borderRadius, accent, bordered, children, onClick, }: BorderedRowProps) => react_jsx_runtime.JSX.Element;
1005
-
1006
985
  /**
1007
986
  * formatDate(date, type?, language?)
1008
987
  * - language : fr/en/es/... (locale inferred), default "en"
@@ -1021,6 +1000,11 @@ declare const formatDistance: (distanceKm: number | string | null | undefined, l
1021
1000
  declare const formatDuration: (minutes: number | null | undefined, language?: string) => string;
1022
1001
  declare const truncateText: (text: string | null | undefined, maxLength?: number) => string;
1023
1002
  declare const truncateFileName: (fileName: string | null | undefined, maxLength?: number) => string;
1003
+ declare const formatEuro: (amount?: number | null) => string;
1004
+ declare const formatName: (person?: {
1005
+ firstname?: string | null;
1006
+ lastname?: string | null;
1007
+ } | null, fallback?: string) => string;
1024
1008
 
1025
1009
  /**
1026
1010
  * Optimiser image:
@@ -1049,4 +1033,4 @@ interface OptimizeImageOptions {
1049
1033
  }
1050
1034
  declare const optimizeImage: (file: File | null | undefined, desiredBaseName: string, opts?: OptimizeImageOptions) => Promise<OptimizeImageResult>;
1051
1035
 
1052
- export { Accordion, type AccordionItem, Avatar, BorderedRow, Box, Bubble, Bulk, Button, CardSkeleton, Checkbox, Col, Collapse, ColorPicker, DatePicker, Divider, Drawer, EmptyState, FileUploadZone, type FloatingAction, FloatingButton, type FloatingButtonProps, Grid, Icon, IconTabs, Image, Input, Link, List, ListItem, MetricCard, Modal, ModalConfirmation, MultiSelect, NewModal, Options, PageContainer, Pagination, Popover, ProgressBar, Radio, Row, Select, type SelectOption, type SelectProps, SkeletonRow, SliderInput, type SortOrder, Spinner, Stepper, Switch, Table, TableBody, TableCell, TableFooter, TableFooterCell, TableFooterRow, TableHeader, TableHeaderCell, type TableHeaderCellProps, TableHeaderRow, TableRow, Tabs, TagBubble, Text, Timeline, type TimelineItem, Tooltip, colors, formatDate, formatDistance, formatDuration, optimizeImage, truncateFileName, truncateText };
1036
+ export { Accordion, type AccordionItem, Avatar, Box, Bubble, Bulk, Button, CardSkeleton, Checkbox, Col, Collapse, ColorPicker, DatePicker, Divider, Drawer, EmptyState, FileUploadZone, type FloatingAction, FloatingButton, type FloatingButtonProps, Grid, Icon, IconTabs, Image, Input, Link, List, ListItem, MetricCard, Modal, ModalConfirmation, MultiSelect, NewModal, Options, PageContainer, Pagination, Popover, ProgressBar, Radio, Row, Select, type SelectOption, type SelectProps, SkeletonRow, SliderInput, type SortOrder, Spinner, Stepper, Switch, Table, TableBody, TableCell, TableFooter, TableFooterCell, TableFooterRow, TableHeader, TableHeaderCell, type TableHeaderCellProps, TableHeaderRow, TableRow, Tabs, TagBubble, Text, Timeline, type TimelineItem, Tooltip, colors, formatDate, formatDistance, formatDuration, formatEuro, formatName, optimizeImage, truncateFileName, truncateText };
package/dist/index.d.ts CHANGED
@@ -32,6 +32,8 @@ interface BoxProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {
32
32
  justifyContent?: string;
33
33
  borderRadius?: string;
34
34
  border?: string;
35
+ /** Colored left accent bar (status/score encoding), painted over the box border. */
36
+ borderColor?: string;
35
37
  style?: CSSProperties;
36
38
  }
37
39
  declare const Box: ({ children, hasShadow, ...rest }: BoxProps) => react_jsx_runtime.JSX.Element;
@@ -247,6 +249,7 @@ interface IconProps {
247
249
  height?: string;
248
250
  backgroundColor?: string;
249
251
  isRound?: boolean;
252
+ shadow?: string;
250
253
  onClick?: () => void;
251
254
  className?: string;
252
255
  style?: CSSProperties;
@@ -294,6 +297,10 @@ interface LinkProps {
294
297
  }
295
298
  declare const Link: ({ children, url, newTab, download, size, variant, ...rest }: LinkProps) => react_jsx_runtime.JSX.Element;
296
299
 
300
+ interface AvatarBadge {
301
+ name: string;
302
+ family?: 'solid' | 'regular' | 'light' | 'brands';
303
+ }
297
304
  interface AvatarProps {
298
305
  name: string;
299
306
  src?: string | null;
@@ -301,8 +308,9 @@ interface AvatarProps {
301
308
  textColor?: string;
302
309
  size?: number;
303
310
  shape?: 'circle' | 'square';
311
+ badge?: AvatarBadge | null;
304
312
  }
305
- declare const Avatar: ({ name, src, backgroundColor, textColor, size, shape, }: AvatarProps) => react_jsx_runtime.JSX.Element;
313
+ declare const Avatar: ({ name, src, backgroundColor, textColor, size, shape, badge, }: AvatarProps) => react_jsx_runtime.JSX.Element;
306
314
 
307
315
  interface ButtonProps extends HTMLAttributes<HTMLButtonElement> {
308
316
  label?: string;
@@ -974,35 +982,6 @@ interface TimelineProps {
974
982
  */
975
983
  declare const Timeline: ({ items, lineColor, emptyLabel, }: TimelineProps) => react_jsx_runtime.JSX.Element;
976
984
 
977
- interface BorderedRowProps {
978
- /** Accent color (DZ color token) — used to encode a score/status/level. */
979
- borderColor?: string;
980
- /** Accent thickness in px. */
981
- borderWidth?: number;
982
- /** Background color (DZ color token). */
983
- background?: string;
984
- /** Inner padding. */
985
- padding?: string;
986
- /** Corner radius — pass "0" for flush table rows, default rounded card. */
987
- borderRadius?: string;
988
- /**
989
- * Accent style:
990
- * - 'edge' (default): full-height colored left border (flush rows / score bars).
991
- * - 'bar': short rounded inset accent bar, centered (white card look).
992
- */
993
- accent?: 'edge' | 'bar';
994
- /** Subtle 1px full border around the card (card look). */
995
- bordered?: boolean;
996
- children: ReactNode;
997
- onClick?: () => void;
998
- }
999
- /**
1000
- * Row/card with a colored accent, used to encode a status (recovery score,
1001
- * feedback level…). Flush table rows: accent="edge" + borderRadius="0".
1002
- * White cards: accent="bar" + bordered + background.
1003
- */
1004
- declare const BorderedRow: ({ borderColor, borderWidth, background, padding, borderRadius, accent, bordered, children, onClick, }: BorderedRowProps) => react_jsx_runtime.JSX.Element;
1005
-
1006
985
  /**
1007
986
  * formatDate(date, type?, language?)
1008
987
  * - language : fr/en/es/... (locale inferred), default "en"
@@ -1021,6 +1000,11 @@ declare const formatDistance: (distanceKm: number | string | null | undefined, l
1021
1000
  declare const formatDuration: (minutes: number | null | undefined, language?: string) => string;
1022
1001
  declare const truncateText: (text: string | null | undefined, maxLength?: number) => string;
1023
1002
  declare const truncateFileName: (fileName: string | null | undefined, maxLength?: number) => string;
1003
+ declare const formatEuro: (amount?: number | null) => string;
1004
+ declare const formatName: (person?: {
1005
+ firstname?: string | null;
1006
+ lastname?: string | null;
1007
+ } | null, fallback?: string) => string;
1024
1008
 
1025
1009
  /**
1026
1010
  * Optimiser image:
@@ -1049,4 +1033,4 @@ interface OptimizeImageOptions {
1049
1033
  }
1050
1034
  declare const optimizeImage: (file: File | null | undefined, desiredBaseName: string, opts?: OptimizeImageOptions) => Promise<OptimizeImageResult>;
1051
1035
 
1052
- export { Accordion, type AccordionItem, Avatar, BorderedRow, Box, Bubble, Bulk, Button, CardSkeleton, Checkbox, Col, Collapse, ColorPicker, DatePicker, Divider, Drawer, EmptyState, FileUploadZone, type FloatingAction, FloatingButton, type FloatingButtonProps, Grid, Icon, IconTabs, Image, Input, Link, List, ListItem, MetricCard, Modal, ModalConfirmation, MultiSelect, NewModal, Options, PageContainer, Pagination, Popover, ProgressBar, Radio, Row, Select, type SelectOption, type SelectProps, SkeletonRow, SliderInput, type SortOrder, Spinner, Stepper, Switch, Table, TableBody, TableCell, TableFooter, TableFooterCell, TableFooterRow, TableHeader, TableHeaderCell, type TableHeaderCellProps, TableHeaderRow, TableRow, Tabs, TagBubble, Text, Timeline, type TimelineItem, Tooltip, colors, formatDate, formatDistance, formatDuration, optimizeImage, truncateFileName, truncateText };
1036
+ export { Accordion, type AccordionItem, Avatar, Box, Bubble, Bulk, Button, CardSkeleton, Checkbox, Col, Collapse, ColorPicker, DatePicker, Divider, Drawer, EmptyState, FileUploadZone, type FloatingAction, FloatingButton, type FloatingButtonProps, Grid, Icon, IconTabs, Image, Input, Link, List, ListItem, MetricCard, Modal, ModalConfirmation, MultiSelect, NewModal, Options, PageContainer, Pagination, Popover, ProgressBar, Radio, Row, Select, type SelectOption, type SelectProps, SkeletonRow, SliderInput, type SortOrder, Spinner, Stepper, Switch, Table, TableBody, TableCell, TableFooter, TableFooterCell, TableFooterRow, TableHeader, TableHeaderCell, type TableHeaderCellProps, TableHeaderRow, TableRow, Tabs, TagBubble, Text, Timeline, type TimelineItem, Tooltip, colors, formatDate, formatDistance, formatDuration, formatEuro, formatName, optimizeImage, truncateFileName, truncateText };
package/dist/index.js CHANGED
@@ -61,7 +61,6 @@ var index_exports = {};
61
61
  __export(index_exports, {
62
62
  Accordion: () => Accordion,
63
63
  Avatar: () => Avatar,
64
- BorderedRow: () => BorderedRow,
65
64
  Box: () => Box,
66
65
  Bubble: () => Bubble,
67
66
  Bulk: () => Bulk,
@@ -122,6 +121,8 @@ __export(index_exports, {
122
121
  formatDate: () => formatDate,
123
122
  formatDistance: () => formatDistance,
124
123
  formatDuration: () => formatDuration,
124
+ formatEuro: () => formatEuro,
125
+ formatName: () => formatName,
125
126
  optimizeImage: () => optimizeImage_default,
126
127
  truncateFileName: () => truncateFileName,
127
128
  truncateText: () => truncateText
@@ -330,6 +331,7 @@ var shouldForwardProp2 = (prop) => ![
330
331
  "hasShadow",
331
332
  "borderRadius",
332
333
  "border",
334
+ "borderColor",
333
335
  "height"
334
336
  ].includes(prop);
335
337
  var StyledBox = import_styled_components2.default.div.withConfig({ shouldForwardProp: shouldForwardProp2 })`
@@ -339,6 +341,7 @@ var StyledBox = import_styled_components2.default.div.withConfig({ shouldForward
339
341
  var _a;
340
342
  return (_a = props.border) != null ? _a : `1px solid ${colors.grey_300}`;
341
343
  }};
344
+ ${(props) => props.borderColor ? `border-left: 4px solid ${colors[props.borderColor] || props.borderColor};` : ""}
342
345
 
343
346
  border-radius: ${(props) => props.borderRadius || "8px"};
344
347
 
@@ -588,7 +591,8 @@ var shouldForwardProp3 = (prop) => ![
588
591
  "width",
589
592
  "height",
590
593
  "backgroundColor",
591
- "isRound"
594
+ "isRound",
595
+ "shadow"
592
596
  ].includes(prop);
593
597
  var StyledIcon = import_styled_components6.default.i.withConfig({ shouldForwardProp: shouldForwardProp3 })`
594
598
  font-size: ${(props) => textSizes2[props.size] || props.size || "1em"};
@@ -606,6 +610,7 @@ var StyledIcon = import_styled_components6.default.i.withConfig({ shouldForwardP
606
610
  cursor: ${(props) => props.onClick ? "pointer" : "inherit"};
607
611
  background-color: ${(props) => colors[props.backgroundColor] || props.backgroundColor || "transparent"};
608
612
  border-radius: ${(props) => props.isRound ? "50%" : "0"};
613
+ text-shadow: ${(props) => props.shadow ? `0 0 6px ${colors[props.shadow] || props.shadow}` : "none"};
609
614
  `;
610
615
  var Icon = (props) => {
611
616
  const _a = props, {
@@ -1855,6 +1860,11 @@ var Image2 = (_a) => {
1855
1860
 
1856
1861
  // src/Components/Avatar/Avatar.tsx
1857
1862
  var import_jsx_runtime20 = require("react/jsx-runtime");
1863
+ var Wrapper3 = import_styled_components16.default.div`
1864
+ position: relative;
1865
+ display: inline-flex;
1866
+ flex-shrink: 0;
1867
+ `;
1858
1868
  var Container = import_styled_components16.default.div`
1859
1869
  width: ${(props) => props.$size}px;
1860
1870
  height: ${(props) => props.$size}px;
@@ -1866,6 +1876,25 @@ var Container = import_styled_components16.default.div`
1866
1876
  flex-shrink: 0;
1867
1877
  overflow: hidden;
1868
1878
  `;
1879
+ var BadgeSlot = import_styled_components16.default.div`
1880
+ position: absolute;
1881
+ right: 0;
1882
+ bottom: 0;
1883
+ width: ${(props) => Math.round(props.$size * 0.4)}px;
1884
+ height: ${(props) => Math.round(props.$size * 0.4)}px;
1885
+ display: flex;
1886
+ align-items: center;
1887
+ justify-content: center;
1888
+ background-color: ${colors.white};
1889
+ border-radius: 50%;
1890
+ box-shadow: 0 2px 6px ${colors.blue_950}66;
1891
+ line-height: 0;
1892
+ `;
1893
+ var BadgeIcon = import_styled_components16.default.i`
1894
+ color: ${colors.blue_950};
1895
+ font-size: ${(props) => Math.round(props.$size * 0.2)}px;
1896
+ line-height: 2;
1897
+ `;
1869
1898
  var Initials = import_styled_components16.default.span`
1870
1899
  color: ${(props) => props.$textColor};
1871
1900
  font-weight: 600;
@@ -1884,33 +1913,44 @@ var Avatar = ({
1884
1913
  backgroundColor,
1885
1914
  textColor,
1886
1915
  size = 56,
1887
- shape = "circle"
1916
+ shape = "circle",
1917
+ badge
1888
1918
  }) => {
1919
+ var _a;
1889
1920
  const [hasImageError, setHasImageError] = (0, import_react7.useState)(false);
1890
1921
  const resolvedBackground = resolveColor(backgroundColor, colors.grey_300);
1891
1922
  const resolvedText = resolveColor(textColor, colors.dark);
1892
1923
  const initials = getInitials(name);
1893
1924
  const sizePx = `${size}px`;
1894
1925
  const borderRadius = shape === "circle" ? "50%" : "4px";
1895
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1896
- Container,
1897
- {
1898
- $size: size,
1899
- $shape: shape,
1900
- $backgroundColor: resolvedBackground,
1901
- children: src && !hasImageError ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1902
- Image2,
1903
- {
1904
- src,
1905
- alt: name,
1906
- width: sizePx,
1907
- height: sizePx,
1908
- borderRadius,
1909
- onError: () => setHasImageError(true)
1910
- }
1911
- ) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Initials, { $textColor: resolvedText, $size: size, children: initials })
1912
- }
1913
- );
1926
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Wrapper3, { children: [
1927
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1928
+ Container,
1929
+ {
1930
+ $size: size,
1931
+ $shape: shape,
1932
+ $backgroundColor: resolvedBackground,
1933
+ children: src && !hasImageError ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1934
+ Image2,
1935
+ {
1936
+ src,
1937
+ alt: name,
1938
+ width: sizePx,
1939
+ height: sizePx,
1940
+ borderRadius,
1941
+ onError: () => setHasImageError(true)
1942
+ }
1943
+ ) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Initials, { $textColor: resolvedText, $size: size, children: initials })
1944
+ }
1945
+ ),
1946
+ badge && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(BadgeSlot, { $size: size, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1947
+ BadgeIcon,
1948
+ {
1949
+ $size: size,
1950
+ className: `fa-${(_a = badge.family) != null ? _a : "regular"} fa-${badge.name}`
1951
+ }
1952
+ ) })
1953
+ ] });
1914
1954
  };
1915
1955
 
1916
1956
  // src/Components/Select/Select.tsx
@@ -2748,7 +2788,7 @@ var Radio = ({
2748
2788
  var import_react11 = require("react");
2749
2789
  var import_styled_components21 = __toESM(require("styled-components"));
2750
2790
  var import_jsx_runtime25 = require("react/jsx-runtime");
2751
- var Wrapper3 = import_styled_components21.default.div`
2791
+ var Wrapper4 = import_styled_components21.default.div`
2752
2792
  width: 100%;
2753
2793
  border-radius: 8px;
2754
2794
  overflow: hidden;
@@ -2835,7 +2875,7 @@ var Accordion = ({
2835
2875
  [disabled, activeItemId, isMultiControlled, onItemToggle]
2836
2876
  );
2837
2877
  if (items) {
2838
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Wrapper3, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(ItemWrapper, { $bordered: bordered, children: [
2878
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Wrapper4, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(ItemWrapper, { $bordered: bordered, children: [
2839
2879
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2840
2880
  Header,
2841
2881
  {
@@ -3788,7 +3828,7 @@ var Options = ({
3788
3828
  var import_react19 = require("react");
3789
3829
  var import_styled_components37 = __toESM(require("styled-components"));
3790
3830
  var import_jsx_runtime44 = require("react/jsx-runtime");
3791
- var Wrapper4 = import_styled_components37.default.nav`
3831
+ var Wrapper5 = import_styled_components37.default.nav`
3792
3832
  width: 100%;
3793
3833
  display: flex;
3794
3834
  align-items: center;
@@ -3821,7 +3861,7 @@ var Stepper = ({
3821
3861
  size = 28,
3822
3862
  className
3823
3863
  }) => {
3824
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Wrapper4, { "aria-label": "progression", className, children: Array.from({ length: numberOfSteps }, (_, i) => {
3864
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Wrapper5, { "aria-label": "progression", className, children: Array.from({ length: numberOfSteps }, (_, i) => {
3825
3865
  const isActive = i === current;
3826
3866
  const isCompleted = i < current;
3827
3867
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_react19.Fragment, { children: [
@@ -5387,7 +5427,7 @@ var CountBadge = import_styled_components45.default.span`
5387
5427
  var import_styled_components46 = __toESM(require("styled-components"));
5388
5428
  var import_jsx_runtime57 = require("react/jsx-runtime");
5389
5429
  var clampPercent = (value) => Math.max(0, Math.min(100, value));
5390
- var Wrapper5 = import_styled_components46.default.div`
5430
+ var Wrapper6 = import_styled_components46.default.div`
5391
5431
  display: flex;
5392
5432
  align-items: center;
5393
5433
  gap: 8px;
@@ -5416,7 +5456,7 @@ var ProgressBar = ({
5416
5456
  showLabel = false
5417
5457
  }) => {
5418
5458
  const percent = clampPercent(value);
5419
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Wrapper5, { children: [
5459
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Wrapper6, { children: [
5420
5460
  /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Track2, { $height: height, $trackColor: trackColor, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Fill, { $height: height, $color: color, $percent: percent }) }),
5421
5461
  showLabel && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Text, { size: "s", weight: "600", children: [
5422
5462
  Math.round(percent),
@@ -5489,61 +5529,6 @@ var Timeline = ({
5489
5529
  }) });
5490
5530
  };
5491
5531
 
5492
- // src/Components/BorderedRow/BorderedRow.tsx
5493
- var import_styled_components48 = __toESM(require("styled-components"));
5494
- var import_jsx_runtime59 = require("react/jsx-runtime");
5495
- var Wrapper6 = import_styled_components48.default.div`
5496
- box-sizing: border-box;
5497
- position: relative;
5498
- width: 100%;
5499
- padding: ${({ $padding }) => $padding};
5500
- ${({ $accent, $borderWidth }) => $accent === "bar" ? `padding-left: ${$borderWidth + 16}px;` : ""}
5501
- border-radius: ${({ $borderRadius }) => $borderRadius};
5502
- background: ${({ $background }) => $background || "transparent"};
5503
- cursor: ${({ $clickable }) => $clickable ? "pointer" : "default"};
5504
- ${({ $bordered }) => $bordered ? `border: 1px solid ${colors.grey_300};` : ""}
5505
- ${({ $accent, $borderWidth, $borderColor }) => $accent === "edge" ? `border-left: ${$borderWidth}px solid ${$borderColor};` : ""}
5506
-
5507
- ${({ $accent, $borderWidth, $borderColor }) => $accent === "bar" ? `
5508
- &::before {
5509
- content: '';
5510
- position: absolute;
5511
- left: 10px;
5512
- top: 50%;
5513
- transform: translateY(-50%);
5514
- height: 62%;
5515
- width: ${$borderWidth}px;
5516
- border-radius: ${$borderWidth}px;
5517
- background: ${$borderColor};
5518
- }
5519
- ` : ""}
5520
- `;
5521
- var BorderedRow = ({
5522
- borderColor = colors.blue_700,
5523
- borderWidth = 4,
5524
- background,
5525
- padding = "12px",
5526
- borderRadius = "8px",
5527
- accent = "edge",
5528
- bordered = false,
5529
- children,
5530
- onClick
5531
- }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
5532
- Wrapper6,
5533
- {
5534
- $borderColor: borderColor,
5535
- $borderWidth: borderWidth,
5536
- $background: background,
5537
- $padding: padding,
5538
- $borderRadius: borderRadius,
5539
- $accent: accent,
5540
- $bordered: bordered,
5541
- $clickable: !!onClick,
5542
- onClick,
5543
- children
5544
- }
5545
- );
5546
-
5547
5532
  // src/data/globalMethods.ts
5548
5533
  var formatDate = (dateString, type = "date", language = "en") => {
5549
5534
  if (!dateString) return "";
@@ -5653,6 +5638,14 @@ var truncateFileName = (fileName, maxLength = 20) => {
5653
5638
  }
5654
5639
  return fileName;
5655
5640
  };
5641
+ var formatEuro = (amount) => `${(amount != null ? amount : 0).toLocaleString("fr-FR", {
5642
+ minimumFractionDigits: 2,
5643
+ maximumFractionDigits: 2
5644
+ })} \u20AC`;
5645
+ var formatName = (person, fallback = "") => {
5646
+ var _a, _b;
5647
+ return person ? `${(_a = person.firstname) != null ? _a : ""} ${(_b = person.lastname) != null ? _b : ""}`.trim() || fallback : fallback;
5648
+ };
5656
5649
 
5657
5650
  // src/services/optimizeImage/optimizeImage.ts
5658
5651
  var hasDocument = () => typeof document !== "undefined";
@@ -5791,7 +5784,6 @@ var optimizeImage_default = optimizeImage;
5791
5784
  0 && (module.exports = {
5792
5785
  Accordion,
5793
5786
  Avatar,
5794
- BorderedRow,
5795
5787
  Box,
5796
5788
  Bubble,
5797
5789
  Bulk,
@@ -5852,6 +5844,8 @@ var optimizeImage_default = optimizeImage;
5852
5844
  formatDate,
5853
5845
  formatDistance,
5854
5846
  formatDuration,
5847
+ formatEuro,
5848
+ formatName,
5855
5849
  optimizeImage,
5856
5850
  truncateFileName,
5857
5851
  truncateText