@activecollab/components 2.0.195 → 2.0.197

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 (62) hide show
  1. package/dist/cjs/components/Display/DisplayHours.js +9 -8
  2. package/dist/cjs/components/Display/DisplayHours.js.map +1 -1
  3. package/dist/cjs/components/Display/types.js.map +1 -1
  4. package/dist/cjs/components/Sort/Sort.js +92 -0
  5. package/dist/cjs/components/Sort/Sort.js.map +1 -0
  6. package/dist/cjs/components/Sort/Styles.js +95 -0
  7. package/dist/cjs/components/Sort/Styles.js.map +1 -0
  8. package/dist/cjs/components/Sort/index.js +17 -0
  9. package/dist/cjs/components/Sort/index.js.map +1 -0
  10. package/dist/cjs/components/index.js +11 -0
  11. package/dist/cjs/components/index.js.map +1 -1
  12. package/dist/cjs/utils/currencyUtils.js +20 -1
  13. package/dist/cjs/utils/currencyUtils.js.map +1 -1
  14. package/dist/cjs/utils/currencyUtils.test.js +5 -0
  15. package/dist/cjs/utils/currencyUtils.test.js.map +1 -1
  16. package/dist/cjs/utils/timeUtils.js +28 -9
  17. package/dist/cjs/utils/timeUtils.js.map +1 -1
  18. package/dist/cjs/utils/timeUtils.test.js +3 -2
  19. package/dist/cjs/utils/timeUtils.test.js.map +1 -1
  20. package/dist/cjs/utils/types.js.map +1 -1
  21. package/dist/esm/components/Display/DisplayHours.d.ts.map +1 -1
  22. package/dist/esm/components/Display/DisplayHours.js +9 -8
  23. package/dist/esm/components/Display/DisplayHours.js.map +1 -1
  24. package/dist/esm/components/Display/types.d.ts +3 -2
  25. package/dist/esm/components/Display/types.d.ts.map +1 -1
  26. package/dist/esm/components/Display/types.js.map +1 -1
  27. package/dist/esm/components/Sort/Sort.d.ts +23 -0
  28. package/dist/esm/components/Sort/Sort.d.ts.map +1 -0
  29. package/dist/esm/components/Sort/Sort.js +71 -0
  30. package/dist/esm/components/Sort/Sort.js.map +1 -0
  31. package/dist/esm/components/Sort/Styles.d.ts +30 -0
  32. package/dist/esm/components/Sort/Styles.d.ts.map +1 -0
  33. package/dist/esm/components/Sort/Styles.js +85 -0
  34. package/dist/esm/components/Sort/Styles.js.map +1 -0
  35. package/dist/esm/components/Sort/index.d.ts +2 -0
  36. package/dist/esm/components/Sort/index.d.ts.map +1 -0
  37. package/dist/esm/components/Sort/index.js +2 -0
  38. package/dist/esm/components/Sort/index.js.map +1 -0
  39. package/dist/esm/components/index.d.ts +1 -0
  40. package/dist/esm/components/index.d.ts.map +1 -1
  41. package/dist/esm/components/index.js +1 -0
  42. package/dist/esm/components/index.js.map +1 -1
  43. package/dist/esm/utils/currencyUtils.d.ts +1 -0
  44. package/dist/esm/utils/currencyUtils.d.ts.map +1 -1
  45. package/dist/esm/utils/currencyUtils.js +10 -0
  46. package/dist/esm/utils/currencyUtils.js.map +1 -1
  47. package/dist/esm/utils/currencyUtils.test.js +6 -1
  48. package/dist/esm/utils/currencyUtils.test.js.map +1 -1
  49. package/dist/esm/utils/timeUtils.d.ts +11 -7
  50. package/dist/esm/utils/timeUtils.d.ts.map +1 -1
  51. package/dist/esm/utils/timeUtils.js +31 -10
  52. package/dist/esm/utils/timeUtils.js.map +1 -1
  53. package/dist/esm/utils/timeUtils.test.js +5 -2
  54. package/dist/esm/utils/timeUtils.test.js.map +1 -1
  55. package/dist/esm/utils/types.d.ts +2 -1
  56. package/dist/esm/utils/types.d.ts.map +1 -1
  57. package/dist/esm/utils/types.js.map +1 -1
  58. package/dist/index.js +217 -28
  59. package/dist/index.js.map +1 -1
  60. package/dist/index.min.js +1 -1
  61. package/dist/index.min.js.map +1 -1
  62. package/package.json +1 -1
@@ -1,33 +1,43 @@
1
+ import { formatNumber } from "./currencyUtils";
1
2
  /**
2
3
  * @function formatHours
3
4
  * @description
4
- * Formats a decimal number representing hours into a formatted string (HH:MM).
5
- * The input can be a number, string, or undefined. The function handles various formats
6
- * and can optionally add a leading zero to the hours component.
5
+ * Formats a decimal number representing hours into a formatted string (HH:MM) or a short form if needed.
6
+ * The input can be a number, string, or undefined. It handles various formats and can optionally add a
7
+ * leading zero to the hours component. With the new "format" argument, if set to "short" and the value is
8
+ * greater than or equal to 1000, it will return a shortened format (e.g., 1K) similar to formatNumber.
7
9
  *
8
- * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
9
- * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
10
+ * @param {number | string | undefined} num - The input representing the hours.
11
+ * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part.
10
12
  * @param {boolean} [trimZeroMinutes=false] - Whether to remove minutes if they are zero.
13
+ * @param {"long" | "short"} [format="long"] - The format type, either "long" for full numbers or "short" for abbreviated output.
11
14
  *
12
- * @returns {string} - A formatted time string in HH:MM format.
15
+ * @returns {string} - A formatted time string or a shortened string.
13
16
  *
14
17
  * @example
15
18
  * formatHours(1.5) // "1:30"
16
19
  * formatHours("3.5", true) // "03:30"
20
+ * formatHours(1500, false, false, "short") // "1K" (using formatNumber)
17
21
  */
18
- export const formatHours = function (num, withLeadingZeroHours, trimZeroMinutes) {
22
+ export const formatHours = function (num, withLeadingZeroHours, trimZeroMinutes, format) {
19
23
  if (withLeadingZeroHours === void 0) {
20
24
  withLeadingZeroHours = false;
21
25
  }
22
26
  if (trimZeroMinutes === void 0) {
23
27
  trimZeroMinutes = false;
24
28
  }
29
+ if (format === void 0) {
30
+ format = "long";
31
+ }
32
+ // Handle the explicit zero case.
25
33
  if (num === 0 || num === "0") {
26
34
  return trimZeroMinutes ? "0" : withLeadingZeroHours ? "00:00" : "0:00";
27
35
  }
28
36
  if (!num) {
29
37
  return "";
30
38
  }
39
+
40
+ // If the input is in colon format, process it as before.
31
41
  if (typeof num === "string" && num.indexOf(":") >= 0) {
32
42
  // eslint-disable-next-line prefer-const
33
43
  let [_hours, _minutes] = num.split(":");
@@ -48,16 +58,27 @@ export const formatHours = function (num, withLeadingZeroHours, trimZeroMinutes)
48
58
  }
49
59
  return withLeadingZeroHours ? "00:" + _minutes : "0:" + _minutes;
50
60
  }
61
+
62
+ // Replace comma with dot if needed.
51
63
  if (typeof num === "string" && num.indexOf(",") >= 0) {
52
64
  num = num.replace(",", ".");
53
65
  }
54
66
  const input = typeof num === "string" ? parseFloat(num) : num;
67
+
68
+ // Use short formatting if specified and the value is >= 1000.
69
+ if (format === "short" && input >= 1000) {
70
+ return formatNumber(input, ",", ".", true, 2, "short");
71
+ }
72
+
73
+ // For whole numbers.
55
74
  if (!isDecimal(input)) {
56
75
  if (trimZeroMinutes) {
57
76
  return withLeadingZeroHours ? withLeadingZero(input) : String(Number(input));
58
77
  }
59
78
  return withLeadingZeroHours ? withLeadingZero(input) + ":00" : input + ":00";
60
79
  }
80
+
81
+ // Process decimal hours.
61
82
  const decimal = input.toFixed(2);
62
83
  const time = decimal.toString().split(".");
63
84
  let hours = time[0];
@@ -65,11 +86,11 @@ export const formatHours = function (num, withLeadingZeroHours, trimZeroMinutes)
65
86
  hours = withLeadingZero(hours);
66
87
  }
67
88
  const minutes = time[1];
68
- const minutes_formatted = Math.round(parseInt(minutes, 10) / 100 * 60);
69
- if (trimZeroMinutes && minutes_formatted === 0) {
89
+ const minutesFormatted = Math.round(parseInt(minutes, 10) / 100 * 60);
90
+ if (trimZeroMinutes && minutesFormatted === 0) {
70
91
  return hours;
71
92
  }
72
- return hours + ":" + withLeadingZero(minutes_formatted);
93
+ return hours + ":" + withLeadingZero(minutesFormatted);
73
94
  };
74
95
  export const withLeadingZero = function (num, size) {
75
96
  if (size === void 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"timeUtils.js","names":["formatHours","num","withLeadingZeroHours","trimZeroMinutes","indexOf","_hours","_minutes","split","length","Number","withLeadingZero","String","replace","input","parseFloat","isDecimal","decimal","toFixed","time","toString","hours","minutes","minutes_formatted","Math","round","parseInt","size","s","isInteger","isValidTime","undefined","test"],"sources":["../../../src/utils/timeUtils.ts"],"sourcesContent":["/**\n * @function formatHours\n * @description\n * Formats a decimal number representing hours into a formatted string (HH:MM).\n * The input can be a number, string, or undefined. The function handles various formats\n * and can optionally add a leading zero to the hours component.\n *\n * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.\n * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.\n * @param {boolean} [trimZeroMinutes=false] - Whether to remove minutes if they are zero.\n *\n * @returns {string} - A formatted time string in HH:MM format.\n *\n * @example\n * formatHours(1.5) // \"1:30\"\n * formatHours(\"3.5\", true) // \"03:30\"\n */\nexport const formatHours = (\n num: number | string | undefined,\n withLeadingZeroHours = false,\n trimZeroMinutes = false\n): string => {\n if (num === 0 || num === \"0\") {\n return trimZeroMinutes ? \"0\" : withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n if (!num) {\n return \"\";\n }\n if (typeof num === \"string\" && num.indexOf(\":\") >= 0) {\n // eslint-disable-next-line prefer-const\n let [_hours, _minutes] = num.split(\":\");\n if (_minutes && _minutes.length === 1 && Number(_minutes) < 10) {\n _minutes = `${Number(_minutes)}0`;\n }\n if (_hours && _minutes) {\n if (trimZeroMinutes && _minutes === \"00\") {\n return withLeadingZeroHours\n ? withLeadingZero(_hours)\n : String(Number(_hours));\n }\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:${_minutes}`\n : `${_hours}:${_minutes}`;\n } else if (_hours && !_minutes) {\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:00`\n : `${_hours}:00`;\n } else if (!_hours && _minutes) {\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n } else if (!_hours && !_minutes) {\n return withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n }\n if (typeof num === \"string\" && num.indexOf(\",\") >= 0) {\n num = num.replace(\",\", \".\");\n }\n const input = typeof num === \"string\" ? parseFloat(num) : num;\n\n if (!isDecimal(input)) {\n if (trimZeroMinutes) {\n return withLeadingZeroHours\n ? withLeadingZero(input)\n : String(Number(input));\n }\n return withLeadingZeroHours\n ? `${withLeadingZero(input)}:00`\n : `${input}:00`;\n }\n\n const decimal = input.toFixed(2);\n const time = decimal.toString().split(\".\");\n let hours: string = time[0];\n if (withLeadingZeroHours) {\n hours = withLeadingZero(hours);\n }\n const minutes: string = time[1];\n const minutes_formatted = Math.round((parseInt(minutes, 10) / 100) * 60);\n\n if (trimZeroMinutes && minutes_formatted === 0) {\n return hours;\n }\n\n return `${hours}:${withLeadingZero(minutes_formatted)}`;\n};\n\nexport const withLeadingZero = (num: string | number, size = 2) => {\n let s = `${num}`;\n while (s.length < size) s = `0` + s;\n return s;\n};\n\nexport const isDecimal = (num: number): boolean => {\n return !Number.isInteger(num);\n};\n\nexport const isValidTime = (time: string | undefined): boolean => {\n return time === undefined || /^([01]\\d|2[0-3]):([0-5]\\d)$/.test(time);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"timeUtils.js","names":["formatNumber","formatHours","num","withLeadingZeroHours","trimZeroMinutes","format","indexOf","_hours","_minutes","split","length","Number","withLeadingZero","String","replace","input","parseFloat","isDecimal","decimal","toFixed","time","toString","hours","minutes","minutesFormatted","Math","round","parseInt","size","s","isInteger","isValidTime","undefined","test"],"sources":["../../../src/utils/timeUtils.ts"],"sourcesContent":["import { formatNumber } from \"./currencyUtils\";\nimport { FormatType } from \"./types\";\n\n/**\n * @function formatHours\n * @description\n * Formats a decimal number representing hours into a formatted string (HH:MM) or a short form if needed.\n * The input can be a number, string, or undefined. It handles various formats and can optionally add a\n * leading zero to the hours component. With the new \"format\" argument, if set to \"short\" and the value is\n * greater than or equal to 1000, it will return a shortened format (e.g., 1K) similar to formatNumber.\n *\n * @param {number | string | undefined} num - The input representing the hours.\n * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part.\n * @param {boolean} [trimZeroMinutes=false] - Whether to remove minutes if they are zero.\n * @param {\"long\" | \"short\"} [format=\"long\"] - The format type, either \"long\" for full numbers or \"short\" for abbreviated output.\n *\n * @returns {string} - A formatted time string or a shortened string.\n *\n * @example\n * formatHours(1.5) // \"1:30\"\n * formatHours(\"3.5\", true) // \"03:30\"\n * formatHours(1500, false, false, \"short\") // \"1K\" (using formatNumber)\n */\nexport const formatHours = (\n num: number | string | undefined,\n withLeadingZeroHours = false,\n trimZeroMinutes = false,\n format: FormatType = \"long\"\n): string => {\n // Handle the explicit zero case.\n if (num === 0 || num === \"0\") {\n return trimZeroMinutes ? \"0\" : withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n if (!num) {\n return \"\";\n }\n\n // If the input is in colon format, process it as before.\n if (typeof num === \"string\" && num.indexOf(\":\") >= 0) {\n // eslint-disable-next-line prefer-const\n let [_hours, _minutes] = num.split(\":\");\n if (_minutes && _minutes.length === 1 && Number(_minutes) < 10) {\n _minutes = `${Number(_minutes)}0`;\n }\n if (_hours && _minutes) {\n if (trimZeroMinutes && _minutes === \"00\") {\n return withLeadingZeroHours\n ? withLeadingZero(_hours)\n : String(Number(_hours));\n }\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:${_minutes}`\n : `${_hours}:${_minutes}`;\n } else if (_hours && !_minutes) {\n return withLeadingZeroHours\n ? `${withLeadingZero(_hours)}:00`\n : `${_hours}:00`;\n } else if (!_hours && _minutes) {\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n } else if (!_hours && !_minutes) {\n return withLeadingZeroHours ? \"00:00\" : \"0:00\";\n }\n return withLeadingZeroHours ? `00:${_minutes}` : `0:${_minutes}`;\n }\n\n // Replace comma with dot if needed.\n if (typeof num === \"string\" && num.indexOf(\",\") >= 0) {\n num = num.replace(\",\", \".\");\n }\n\n const input = typeof num === \"string\" ? parseFloat(num) : num;\n\n // Use short formatting if specified and the value is >= 1000.\n if (format === \"short\" && input >= 1000) {\n return formatNumber(input, \",\", \".\", true, 2, \"short\");\n }\n\n // For whole numbers.\n if (!isDecimal(input)) {\n if (trimZeroMinutes) {\n return withLeadingZeroHours\n ? withLeadingZero(input)\n : String(Number(input));\n }\n return withLeadingZeroHours\n ? `${withLeadingZero(input)}:00`\n : `${input}:00`;\n }\n\n // Process decimal hours.\n const decimal = input.toFixed(2);\n const time = decimal.toString().split(\".\");\n let hours: string = time[0];\n if (withLeadingZeroHours) {\n hours = withLeadingZero(hours);\n }\n const minutes: string = time[1];\n const minutesFormatted = Math.round((parseInt(minutes, 10) / 100) * 60);\n\n if (trimZeroMinutes && minutesFormatted === 0) {\n return hours;\n }\n\n return `${hours}:${withLeadingZero(minutesFormatted)}`;\n};\n\nexport const withLeadingZero = (num: string | number, size = 2) => {\n let s = `${num}`;\n while (s.length < size) s = `0` + s;\n return s;\n};\n\nexport const isDecimal = (num: number): boolean => {\n return !Number.isInteger(num);\n};\n\nexport const isValidTime = (time: string | undefined): boolean => {\n return time === undefined || /^([01]\\d|2[0-3]):([0-5]\\d)$/.test(time);\n};\n"],"mappings":"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"}
@@ -1,13 +1,16 @@
1
1
  import { formatHours } from "./timeUtils";
2
2
  describe("timeUtis.ts", () => {
3
- it.each([["1:30", "1:30"], ["1:30", "01:30", true], ["1.5", "1:30"], ["1.05", "1:03"], ["5,5", "5:30"], ["5.5", "5:30"], ["5:30", "5:30"], [",5", "0:30"], [".5", "0:30"], ["", ""], [":", "0:00"], ["1:", "1:00"], ["1:", "01:00", true], [":05", "00:05", true], [",05", "00:03", true], [0.5, "00:30", true], [1.5, "01:30", true], [1.5, "1:30", false], ["0:3", "0:30", false], ["555:35", "555:35", false], ["555", "555:00", false], [555.5, "555:30", false], ["5:00", "5", false, true], ["05:00", "05", true, true], ["12:00", "12", false, true], ["12:30", "12:30", false, true], [5, "5:00", false, false], [5, "5", false, true], [0, "0:00", false, false], [0, "0", false, true], [5, "05", true, true], ["5:00", "05", true, true], ["05:00", "5", false, true]])("should formatTime", function (value, expected, leadingZero, trimZeroMinutes) {
3
+ it.each([["1:30", "1:30"], ["1:30", "01:30", true], ["1.5", "1:30"], ["1.05", "1:03"], ["5,5", "5:30"], ["5.5", "5:30"], ["5:30", "5:30"], [",5", "0:30"], [".5", "0:30"], ["", ""], [":", "0:00"], ["1:", "1:00"], ["1:", "01:00", true], [":05", "00:05", true], [",05", "00:03", true], [0.5, "00:30", true], [1.5, "01:30", true], [1.5, "1:30", false], ["0:3", "0:30", false], ["555:35", "555:35", false], ["555", "555:00", false], [555.5, "555:30", false], ["5:00", "5", false, true], ["05:00", "05", true, true], ["12:00", "12", false, true], ["12:30", "12:30", false, true], [5, "5:00", false, false], [5, "5", false, true], [0, "0:00", false, false], [0, "0", false, true], [5, "05", true, true], ["5:00", "05", true, true], ["05:00", "5", false, true], [1500, "1.5K", false, false, "short"], [1000, "1K", false, false, "short"], ["999.50", "999:30", false, false, "short"], [1500.25, "1.5K", false, false, "short"]])("should formatTime", function (value, expected, leadingZero, trimZeroMinutes, format) {
4
4
  if (leadingZero === void 0) {
5
5
  leadingZero = false;
6
6
  }
7
7
  if (trimZeroMinutes === void 0) {
8
8
  trimZeroMinutes = false;
9
9
  }
10
- expect(formatHours(value, leadingZero, trimZeroMinutes)).toEqual(expected);
10
+ if (format === void 0) {
11
+ format = "long";
12
+ }
13
+ return expect(formatHours(value, leadingZero, trimZeroMinutes, format)).toEqual(expected);
11
14
  });
12
15
  });
13
16
  //# sourceMappingURL=timeUtils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeUtils.test.js","names":["formatHours","describe","it","each","value","expected","leadingZero","trimZeroMinutes","expect","toEqual"],"sources":["../../../src/utils/timeUtils.test.ts"],"sourcesContent":["import { formatHours } from \"./timeUtils\";\n\ndescribe(\"timeUtis.ts\", () => {\n it.each([\n [\"1:30\", \"1:30\"],\n [\"1:30\", \"01:30\", true],\n [\"1.5\", \"1:30\"],\n [\"1.05\", \"1:03\"],\n [\"5,5\", \"5:30\"],\n [\"5.5\", \"5:30\"],\n [\"5:30\", \"5:30\"],\n [\",5\", \"0:30\"],\n [\".5\", \"0:30\"],\n [\"\", \"\"],\n [\":\", \"0:00\"],\n [\"1:\", \"1:00\"],\n [\"1:\", \"01:00\", true],\n [\":05\", \"00:05\", true],\n [\",05\", \"00:03\", true],\n [0.5, \"00:30\", true],\n [1.5, \"01:30\", true],\n [1.5, \"1:30\", false],\n [\"0:3\", \"0:30\", false],\n [\"555:35\", \"555:35\", false],\n [\"555\", \"555:00\", false],\n [555.5, \"555:30\", false],\n [\"5:00\", \"5\", false, true],\n [\"05:00\", \"05\", true, true],\n [\"12:00\", \"12\", false, true],\n [\"12:30\", \"12:30\", false, true],\n [5, \"5:00\", false, false],\n [5, \"5\", false, true],\n [0, \"0:00\", false, false],\n [0, \"0\", false, true],\n [5, \"05\", true, true],\n [\"5:00\", \"05\", true, true],\n [\"05:00\", \"5\", false, true],\n ])(\n \"should formatTime\",\n (value, expected, leadingZero = false, trimZeroMinutes = false) => {\n expect(formatHours(value, leadingZero, trimZeroMinutes)).toEqual(\n expected\n );\n }\n );\n});\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,aAAa;AAEzCC,QAAQ,CAAC,aAAa,EAAE,MAAM;EAC5BC,EAAE,CAACC,IAAI,CAAC,CACN,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EACvB,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,CAAC,KAAK,EAAE,MAAM,CAAC,EACf,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,EAAE,EAAE,EAAE,CAAC,EACR,CAAC,GAAG,EAAE,MAAM,CAAC,EACb,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EACrB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EACtB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EACtB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EACpB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EACpB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EACpB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EACtB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3B,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EACxB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EACxB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAC1B,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAC3B,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAC5B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EACzB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EACrB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EACzB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EACrB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACrB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAC1B,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAC5B,CAAC,CACA,mBAAmB,EACnB,UAACC,KAAK,EAAEC,QAAQ,EAAEC,WAAW,EAAUC,eAAe,EAAa;IAAA,IAAjDD,WAAW;MAAXA,WAAW,GAAG,KAAK;IAAA;IAAA,IAAEC,eAAe;MAAfA,eAAe,GAAG,KAAK;IAAA;IAC5DC,MAAM,CAACR,WAAW,CAACI,KAAK,EAAEE,WAAW,EAAEC,eAAe,CAAC,CAAC,CAACE,OAAO,CAC9DJ,QACF,CAAC;EACH,CACF,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"timeUtils.test.js","names":["formatHours","describe","it","each","value","expected","leadingZero","trimZeroMinutes","format","expect","toEqual"],"sources":["../../../src/utils/timeUtils.test.ts"],"sourcesContent":["import { formatHours } from \"./timeUtils\";\nimport { FormatType } from \"./types\";\n\ndescribe(\"timeUtis.ts\", () => {\n it.each([\n [\"1:30\", \"1:30\"],\n [\"1:30\", \"01:30\", true],\n [\"1.5\", \"1:30\"],\n [\"1.05\", \"1:03\"],\n [\"5,5\", \"5:30\"],\n [\"5.5\", \"5:30\"],\n [\"5:30\", \"5:30\"],\n [\",5\", \"0:30\"],\n [\".5\", \"0:30\"],\n [\"\", \"\"],\n [\":\", \"0:00\"],\n [\"1:\", \"1:00\"],\n [\"1:\", \"01:00\", true],\n [\":05\", \"00:05\", true],\n [\",05\", \"00:03\", true],\n [0.5, \"00:30\", true],\n [1.5, \"01:30\", true],\n [1.5, \"1:30\", false],\n [\"0:3\", \"0:30\", false],\n [\"555:35\", \"555:35\", false],\n [\"555\", \"555:00\", false],\n [555.5, \"555:30\", false],\n [\"5:00\", \"5\", false, true],\n [\"05:00\", \"05\", true, true],\n [\"12:00\", \"12\", false, true],\n [\"12:30\", \"12:30\", false, true],\n [5, \"5:00\", false, false],\n [5, \"5\", false, true],\n [0, \"0:00\", false, false],\n [0, \"0\", false, true],\n [5, \"05\", true, true],\n [\"5:00\", \"05\", true, true],\n [\"05:00\", \"5\", false, true],\n [1500, \"1.5K\", false, false, \"short\" as FormatType],\n [1000, \"1K\", false, false, \"short\" as FormatType],\n [\"999.50\", \"999:30\", false, false, \"short\" as FormatType],\n [1500.25, \"1.5K\", false, false, \"short\" as FormatType],\n ])(\n \"should formatTime\",\n (\n value,\n expected,\n leadingZero = false,\n trimZeroMinutes = false,\n format = \"long\"\n ) =>\n expect(formatHours(value, leadingZero, trimZeroMinutes, format)).toEqual(\n expected\n )\n );\n});\n"],"mappings":"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"}
@@ -41,11 +41,12 @@ export interface FormatNumberArgs {
41
41
  decimalSeparator?: "," | ".";
42
42
  trimDecimals?: boolean;
43
43
  decimalSpaces?: number;
44
- format?: "long" | "short";
44
+ format?: FormatType;
45
45
  }
46
46
  export interface FormatCurrencyArgs extends FormatNumberArgs {
47
47
  currencyCode?: string;
48
48
  currencyCodePosition?: "right" | "left";
49
49
  }
50
+ export type FormatType = "short" | "long";
50
51
  export {};
51
52
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,MAAM,OAAO,CACjB,CAAC,SAAS,MAAM,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAC1E,GAAG,CAAC,wBAAwB,CAAC,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,KAAK,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,IAAI;IACzC;;;OAGG;IACH,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACrC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,aAAa,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,CACjC,CAAC,SAAS,KAAK,CAAC,WAAW,EAC3B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,yBAAyB,CACnC,CAAC,SAAS,KAAK,CAAC,WAAW,EAC3B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7B,uBAAuB,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,IACpD,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC;;;GAGG;AACH,MAAM,MAAM,gCAAgC,CAC1C,CAAC,SAAS,KAAK,CAAC,WAAW,EAC3B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7B,yBAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACpC,gBAAgB,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,MAAM,OAAO,CACjB,CAAC,SAAS,MAAM,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAC1E,GAAG,CAAC,wBAAwB,CAAC,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,KAAK,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,IAAI;IACzC;;;OAGG;IACH,EAAE,CAAC,EAAE,CAAC,CAAC;CACR,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACrC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,aAAa,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,CACjC,CAAC,SAAS,KAAK,CAAC,WAAW,EAC3B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,yBAAyB,CACnC,CAAC,SAAS,KAAK,CAAC,WAAW,EAC3B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7B,uBAAuB,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,IACpD,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC;;;GAGG;AACH,MAAM,MAAM,gCAAgC,CAC1C,CAAC,SAAS,KAAK,CAAC,WAAW,EAC3B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC7B,yBAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACpC,gBAAgB,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/utils/types.ts"],"sourcesContent":["import React from \"react\";\n\n// Source: https://github.com/emotion-js/emotion/blob/master/packages/styled-base/types/helper.d.ts\n// A more precise version of just React.ComponentPropsWithoutRef on its own\nexport type PropsOf<\n C extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<unknown>\n> = JSX.LibraryManagedAttributes<C, React.ComponentPropsWithoutRef<C>>;\n\ntype AsProp<C extends React.ElementType> = {\n /**\n * An override of the default HTML tag.\n * Can also be another React component.\n */\n as?: C;\n};\n\n/**\n * Allows for extending a set of props (`ExtendedProps`) by an overriding set of props\n * (`OverrideProps`), ensuring that any duplicates are overridden by the overriding\n * set of props.\n */\nexport type ExtendableProps<\n ExtendedProps = Record<string, unknown>,\n OverrideProps = Record<string, unknown>\n> = OverrideProps & Omit<ExtendedProps, keyof OverrideProps>;\n\n/**\n * Allows for inheriting the props from the specified element type so that\n * props like children, className & style work, as well as element-specific\n * attributes like aria roles. The component (`C`) must be passed in.\n */\nexport type InheritableElementProps<\n C extends React.ElementType,\n Props = Record<string, unknown>\n> = ExtendableProps<PropsOf<C>, Props>;\n\n/**\n * A more sophisticated version of `InheritableElementProps` where\n * the passed in `as` prop will determine which props can be included\n */\nexport type PolymorphicComponentProps<\n C extends React.ElementType,\n Props = Record<string, unknown>\n> = InheritableElementProps<C, Props & AsProp<C>>;\n\n/**\n * Utility type to extract the `ref` prop from a polymorphic component\n */\nexport type PolymorphicRef<C extends React.ElementType> =\n React.ComponentPropsWithRef<C>[\"ref\"];\n/**\n * A wrapper of `PolymorphicComponentProps` that also includes the `ref`\n * prop for the polymorphic component\n */\nexport type PolymorphicComponentPropsWithRef<\n C extends React.ElementType,\n Props = Record<string, unknown>\n> = PolymorphicComponentProps<C, Props> & { ref?: PolymorphicRef<C> };\n\nexport interface FormatNumberArgs {\n value: string | number;\n thousandSeparator?: \",\" | \".\" | \" \";\n decimalSeparator?: \",\" | \".\";\n trimDecimals?: boolean;\n decimalSpaces?: number;\n format?: \"long\" | \"short\";\n}\n\nexport interface FormatCurrencyArgs extends FormatNumberArgs {\n currencyCode?: string;\n currencyCodePosition?: \"right\" | \"left\";\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/utils/types.ts"],"sourcesContent":["import React from \"react\";\n\n// Source: https://github.com/emotion-js/emotion/blob/master/packages/styled-base/types/helper.d.ts\n// A more precise version of just React.ComponentPropsWithoutRef on its own\nexport type PropsOf<\n C extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<unknown>\n> = JSX.LibraryManagedAttributes<C, React.ComponentPropsWithoutRef<C>>;\n\ntype AsProp<C extends React.ElementType> = {\n /**\n * An override of the default HTML tag.\n * Can also be another React component.\n */\n as?: C;\n};\n\n/**\n * Allows for extending a set of props (`ExtendedProps`) by an overriding set of props\n * (`OverrideProps`), ensuring that any duplicates are overridden by the overriding\n * set of props.\n */\nexport type ExtendableProps<\n ExtendedProps = Record<string, unknown>,\n OverrideProps = Record<string, unknown>\n> = OverrideProps & Omit<ExtendedProps, keyof OverrideProps>;\n\n/**\n * Allows for inheriting the props from the specified element type so that\n * props like children, className & style work, as well as element-specific\n * attributes like aria roles. The component (`C`) must be passed in.\n */\nexport type InheritableElementProps<\n C extends React.ElementType,\n Props = Record<string, unknown>\n> = ExtendableProps<PropsOf<C>, Props>;\n\n/**\n * A more sophisticated version of `InheritableElementProps` where\n * the passed in `as` prop will determine which props can be included\n */\nexport type PolymorphicComponentProps<\n C extends React.ElementType,\n Props = Record<string, unknown>\n> = InheritableElementProps<C, Props & AsProp<C>>;\n\n/**\n * Utility type to extract the `ref` prop from a polymorphic component\n */\nexport type PolymorphicRef<C extends React.ElementType> =\n React.ComponentPropsWithRef<C>[\"ref\"];\n/**\n * A wrapper of `PolymorphicComponentProps` that also includes the `ref`\n * prop for the polymorphic component\n */\nexport type PolymorphicComponentPropsWithRef<\n C extends React.ElementType,\n Props = Record<string, unknown>\n> = PolymorphicComponentProps<C, Props> & { ref?: PolymorphicRef<C> };\n\nexport interface FormatNumberArgs {\n value: string | number;\n thousandSeparator?: \",\" | \".\" | \" \";\n decimalSeparator?: \",\" | \".\";\n trimDecimals?: boolean;\n decimalSpaces?: number;\n format?: FormatType;\n}\n\nexport interface FormatCurrencyArgs extends FormatNumberArgs {\n currencyCode?: string;\n currencyCodePosition?: \"right\" | \"left\";\n}\n\nexport type FormatType = \"short\" | \"long\";\n"],"mappings":""}
package/dist/index.js CHANGED
@@ -362,16 +362,16 @@
362
362
  });
363
363
  ButtonGroup.displayName = "ButtonGroup";
364
364
 
365
- var StyledList = styled__default["default"].ul.withConfig({
365
+ var StyledList$1 = styled__default["default"].ul.withConfig({
366
366
  displayName: "Styles__StyledList",
367
367
  componentId: "sc-dv1w0m-0"
368
368
  })(["list-style-type:none;margin:0;padding:0;"]);
369
- StyledList.displayName = "StyledList";
370
- var StyledListItem = styled__default["default"].li.withConfig({
369
+ StyledList$1.displayName = "StyledList";
370
+ var StyledListItem$1 = styled__default["default"].li.withConfig({
371
371
  displayName: "Styles__StyledListItem",
372
372
  componentId: "sc-dv1w0m-1"
373
373
  })(["", " ", " display:flex;flex-direction:row;align-items:center;cursor:pointer;padding:0 1rem;margin:0.25rem 0;font-size:0.875rem;user-select:none;color:var(--color-theme-900);line-height:28px;> svg:first-child{margin-right:8px;}&:hover,&:focus-visible{background-color:var(--color-theme-200);outline:none;}"], BoxSizingStyle, FontStyle);
374
- StyledListItem.displayName = "StyledListItem";
374
+ StyledListItem$1.displayName = "StyledListItem";
375
375
  var StyledListSeparator$1 = styled__default["default"].div.withConfig({
376
376
  displayName: "Styles__StyledListSeparator",
377
377
  componentId: "sc-dv1w0m-2"
@@ -383,7 +383,7 @@
383
383
  var children = _ref.children,
384
384
  className = _ref.className,
385
385
  props = _objectWithoutProperties(_ref, _excluded$1z);
386
- return /*#__PURE__*/React__default["default"].createElement(StyledListItem, _extends({
386
+ return /*#__PURE__*/React__default["default"].createElement(StyledListItem$1, _extends({
387
387
  className: classNames__default["default"]("c-list-item", className),
388
388
  ref: ref,
389
389
  tabIndex: 0
@@ -406,7 +406,7 @@
406
406
  var children = _ref.children,
407
407
  className = _ref.className,
408
408
  props = _objectWithoutProperties(_ref, _excluded$1x);
409
- return /*#__PURE__*/React__default["default"].createElement(StyledList, _extends({
409
+ return /*#__PURE__*/React__default["default"].createElement(StyledList$1, _extends({
410
410
  className: className,
411
411
  ref: ref,
412
412
  tabIndex: -1
@@ -723,6 +723,19 @@
723
723
  }
724
724
  return currencyCodePosition === "right" ? "".concat(formattedNum, " ").concat(currencyCode) : "".concat(currencyCode, " ").concat(formattedNum);
725
725
  };
726
+ var parseValueToNumber = function parseValueToNumber(value, thousandSeparator, decimalSeparator) {
727
+ var stringValue = String(value).trim();
728
+ if (stringValue.includes(":")) {
729
+ var _stringValue$split = stringValue.split(":"),
730
+ _stringValue$split2 = _slicedToArray(_stringValue$split, 2),
731
+ hoursPart = _stringValue$split2[0],
732
+ minutesPart = _stringValue$split2[1];
733
+ var hours = parseFloat(hoursPart) || 0;
734
+ var minutes = parseFloat(minutesPart) || 0;
735
+ return hours + minutes / 60;
736
+ }
737
+ return +stringValue.replaceAll(thousandSeparator, "").replace(decimalSeparator, ".");
738
+ };
726
739
 
727
740
  var validateStopwatchTime = function validateStopwatchTime(value) {
728
741
  return /^([0-9]{0,2})?(((:([0-5][0-9])?)|(:[0-5]?))|(\.[0-9]{0,2})|(,[0-9]{0,2}))?$/g.test(value);
@@ -795,29 +808,36 @@
795
808
  /**
796
809
  * @function formatHours
797
810
  * @description
798
- * Formats a decimal number representing hours into a formatted string (HH:MM).
799
- * The input can be a number, string, or undefined. The function handles various formats
800
- * and can optionally add a leading zero to the hours component.
811
+ * Formats a decimal number representing hours into a formatted string (HH:MM) or a short form if needed.
812
+ * The input can be a number, string, or undefined. It handles various formats and can optionally add a
813
+ * leading zero to the hours component. With the new "format" argument, if set to "short" and the value is
814
+ * greater than or equal to 1000, it will return a shortened format (e.g., 1K) similar to formatNumber.
801
815
  *
802
- * @param {number | string | undefined} num - The input representing the hours, which can be in decimal format, a time string, or undefined.
803
- * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part of the output.
816
+ * @param {number | string | undefined} num - The input representing the hours.
817
+ * @param {boolean} [withLeadingZeroHours=false] - Whether to add a leading zero to the hours part.
804
818
  * @param {boolean} [trimZeroMinutes=false] - Whether to remove minutes if they are zero.
819
+ * @param {"long" | "short"} [format="long"] - The format type, either "long" for full numbers or "short" for abbreviated output.
805
820
  *
806
- * @returns {string} - A formatted time string in HH:MM format.
821
+ * @returns {string} - A formatted time string or a shortened string.
807
822
  *
808
823
  * @example
809
824
  * formatHours(1.5) // "1:30"
810
825
  * formatHours("3.5", true) // "03:30"
826
+ * formatHours(1500, false, false, "short") // "1K" (using formatNumber)
811
827
  */
812
828
  var formatHours = function formatHours(num) {
813
829
  var withLeadingZeroHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
814
830
  var trimZeroMinutes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
831
+ var format = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "long";
832
+ // Handle the explicit zero case.
815
833
  if (num === 0 || num === "0") {
816
834
  return trimZeroMinutes ? "0" : withLeadingZeroHours ? "00:00" : "0:00";
817
835
  }
818
836
  if (!num) {
819
837
  return "";
820
838
  }
839
+
840
+ // If the input is in colon format, process it as before.
821
841
  if (typeof num === "string" && num.indexOf(":") >= 0) {
822
842
  // eslint-disable-next-line prefer-const
823
843
  var _num$split = num.split(":"),
@@ -841,16 +861,27 @@
841
861
  }
842
862
  return withLeadingZeroHours ? "00:".concat(_minutes) : "0:".concat(_minutes);
843
863
  }
864
+
865
+ // Replace comma with dot if needed.
844
866
  if (typeof num === "string" && num.indexOf(",") >= 0) {
845
867
  num = num.replace(",", ".");
846
868
  }
847
869
  var input = typeof num === "string" ? parseFloat(num) : num;
870
+
871
+ // Use short formatting if specified and the value is >= 1000.
872
+ if (format === "short" && input >= 1000) {
873
+ return formatNumber(input, ",", ".", true, 2, "short");
874
+ }
875
+
876
+ // For whole numbers.
848
877
  if (!isDecimal(input)) {
849
878
  if (trimZeroMinutes) {
850
879
  return withLeadingZeroHours ? withLeadingZero(input) : String(Number(input));
851
880
  }
852
881
  return withLeadingZeroHours ? "".concat(withLeadingZero(input), ":00") : "".concat(input, ":00");
853
882
  }
883
+
884
+ // Process decimal hours.
854
885
  var decimal = input.toFixed(2);
855
886
  var time = decimal.toString().split(".");
856
887
  var hours = time[0];
@@ -858,11 +889,11 @@
858
889
  hours = withLeadingZero(hours);
859
890
  }
860
891
  var minutes = time[1];
861
- var minutes_formatted = Math.round(parseInt(minutes, 10) / 100 * 60);
862
- if (trimZeroMinutes && minutes_formatted === 0) {
892
+ var minutesFormatted = Math.round(parseInt(minutes, 10) / 100 * 60);
893
+ if (trimZeroMinutes && minutesFormatted === 0) {
863
894
  return hours;
864
895
  }
865
- return "".concat(hours, ":").concat(withLeadingZero(minutes_formatted));
896
+ return "".concat(hours, ":").concat(withLeadingZero(minutesFormatted));
866
897
  };
867
898
  var withLeadingZero = function withLeadingZero(num) {
868
899
  var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
@@ -877,7 +908,7 @@
877
908
  return time === undefined || /^([01]\d|2[0-3]):([0-5]\d)$/.test(time);
878
909
  };
879
910
 
880
- var StyledIconButton = styled__default["default"](Button).withConfig({
911
+ var StyledIconButton$1 = styled__default["default"](Button).withConfig({
881
912
  displayName: "Styles__StyledIconButton",
882
913
  componentId: "sc-1teza2f-0"
883
914
  })(["display:inline-flex;justify-content:center;align-items:center;padding:0;width:32px;", " ", ""], function (_ref) {
@@ -919,7 +950,7 @@
919
950
  size = _ref.size,
920
951
  active = _ref.active,
921
952
  args = _objectWithoutProperties(_ref, _excluded$1w);
922
- return /*#__PURE__*/React__default["default"].createElement(StyledIconButton, _extends({
953
+ return /*#__PURE__*/React__default["default"].createElement(StyledIconButton$1, _extends({
923
954
  className: className,
924
955
  variant: variant,
925
956
  size: size,
@@ -17676,27 +17707,27 @@
17676
17707
  _ref$as = _ref.as,
17677
17708
  as = _ref$as === void 0 ? "span" : _ref$as,
17678
17709
  rest = _objectWithoutProperties(_ref, _excluded$y);
17679
- var numberValue = +String(value).replaceAll(thousandSeparator, "").replace(decimalSeparator, ".");
17680
- var formattedValue = formatNumber(numberValue, thousandSeparator, decimalSeparator, trimDecimals, decimalSpaces, "short");
17681
- var formattedLongValue = formatHours(numberValue, withLeadingZero, trimZeroMinutes);
17682
- var showShortVersion = numberValue > 1000;
17683
- if (format === "short" && showShortVersion) {
17710
+ var numberValue = parseValueToNumber(value, thousandSeparator, decimalSeparator);
17711
+ var shouldDisplayShort = format === "short" && numberValue >= 1000;
17712
+ var longValue = formatHours(numberValue, withLeadingZero, trimZeroMinutes, "long");
17713
+ var shortValue = formatNumber(numberValue, thousandSeparator, decimalSeparator, trimDecimals, decimalSpaces, "short");
17714
+ if (shouldDisplayShort) {
17684
17715
  return /*#__PURE__*/React__default["default"].createElement(Tooltip, {
17685
- title: formattedLongValue,
17716
+ title: formatHours(numberValue),
17686
17717
  disable: disableTooltip
17687
17718
  }, /*#__PURE__*/React__default["default"].createElement(Typography, _extends({
17688
17719
  as: as,
17689
17720
  variant: variant,
17690
17721
  className: className,
17691
17722
  ref: ref
17692
- }, rest), formattedValue));
17723
+ }, rest), shortValue));
17693
17724
  }
17694
17725
  return /*#__PURE__*/React__default["default"].createElement(Typography, _extends({
17695
17726
  as: as,
17696
17727
  variant: variant,
17697
17728
  className: className,
17698
17729
  ref: ref
17699
- }, rest), formattedLongValue);
17730
+ }, rest), longValue);
17700
17731
  });
17701
17732
  DisplayHours.displayName = "DisplayHours";
17702
17733
 
@@ -19485,7 +19516,7 @@
19485
19516
  componentId: "sc-7n59oz-1"
19486
19517
  })([""]);
19487
19518
  StyledValueButtonValue.displayName = "StyledValueButtonValue";
19488
- var StyledValueButton = styled__default["default"](Button).withConfig({
19519
+ var StyledValueButton$1 = styled__default["default"](Button).withConfig({
19489
19520
  displayName: "Styles__StyledValueButton",
19490
19521
  componentId: "sc-7n59oz-2"
19491
19522
  })(["", " ", ""], function (props) {
@@ -19497,7 +19528,7 @@
19497
19528
  "pointerEvents": "none"
19498
19529
  });
19499
19530
  });
19500
- StyledValueButton.displayName = "StyledValueButton";
19531
+ StyledValueButton$1.displayName = "StyledValueButton";
19501
19532
 
19502
19533
  var _excluded$o = ["active", "alwaysShowIcon", "icon", "label", "value"];
19503
19534
  var ValueButton = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -19509,7 +19540,7 @@
19509
19540
  label = _ref.label,
19510
19541
  value = _ref.value,
19511
19542
  args = _objectWithoutProperties(_ref, _excluded$o);
19512
- return /*#__PURE__*/React__default["default"].createElement(StyledValueButton, _extends({
19543
+ return /*#__PURE__*/React__default["default"].createElement(StyledValueButton$1, _extends({
19513
19544
  className: "c-value-button"
19514
19545
  }, args, {
19515
19546
  ref: ref,
@@ -22167,6 +22198,163 @@
22167
22198
  }, title) : title, action), children)));
22168
22199
  };
22169
22200
 
22201
+ var StyledSortWrapper = styled__default["default"].div.withConfig({
22202
+ displayName: "Styles__StyledSortWrapper",
22203
+ componentId: "sc-11r5ac9-0"
22204
+ })(["", ";"], {
22205
+ "width": "fit-content"
22206
+ });
22207
+ StyledSortWrapper.displayName = "StyledSortWrapper";
22208
+ var StyledValueButton = styled__default["default"](ValueButton).withConfig({
22209
+ displayName: "Styles__StyledValueButton",
22210
+ componentId: "sc-11r5ac9-1"
22211
+ })(["", ";"], {
22212
+ "display": "none",
22213
+ "alignItems": "center",
22214
+ "@media (min-width: 768px)": {
22215
+ "display": "flex"
22216
+ }
22217
+ });
22218
+ StyledValueButton.displayName = "StyledValueButton";
22219
+ var StyledIconButton = styled__default["default"](IconButton).withConfig({
22220
+ displayName: "Styles__StyledIconButton",
22221
+ componentId: "sc-11r5ac9-2"
22222
+ })(["", ";"], {
22223
+ "display": "flex",
22224
+ "alignItems": "center",
22225
+ ":hover": {
22226
+ "color": "var(--color-primary)"
22227
+ },
22228
+ "@media (min-width: 768px)": {
22229
+ "display": "none"
22230
+ }
22231
+ });
22232
+ StyledIconButton.displayName = "StyledIconButton";
22233
+ var StyledSortIcon = styled__default["default"](SortGeneralIcon$1).withConfig({
22234
+ displayName: "Styles__StyledSortIcon",
22235
+ componentId: "sc-11r5ac9-3"
22236
+ })(["", ";"], {
22237
+ "marginTop": "0px"
22238
+ });
22239
+ StyledSortIcon.displayName = "StyledSortIcon";
22240
+ var StyledSortIconDown = styled__default["default"](ArrowDownLongIcon$1).withConfig({
22241
+ displayName: "Styles__StyledSortIconDown",
22242
+ componentId: "sc-11r5ac9-4"
22243
+ })(["", ";"], {
22244
+ "flexShrink": "0"
22245
+ });
22246
+ StyledSortIconDown.displayName = "StyledSortIconDown";
22247
+ var StyledSortIconUp = styled__default["default"](ArrowUpLongIcon$1).withConfig({
22248
+ displayName: "Styles__StyledSortIconUp",
22249
+ componentId: "sc-11r5ac9-5"
22250
+ })(["", ";"], {
22251
+ "flexShrink": "0"
22252
+ });
22253
+ StyledSortIconUp.displayName = "StyledSortIconUp";
22254
+ var StyledList = styled__default["default"](List).withConfig({
22255
+ displayName: "Styles__StyledList",
22256
+ componentId: "sc-11r5ac9-6"
22257
+ })(["", ";"], {
22258
+ "paddingTop": "0.5rem",
22259
+ "paddingBottom": "0.5rem"
22260
+ });
22261
+ StyledList.displayName = "StyledList";
22262
+ var StyledListItem = styled__default["default"](ListItem).withConfig({
22263
+ displayName: "Styles__StyledListItem",
22264
+ componentId: "sc-11r5ac9-7"
22265
+ })(["", ";svg{visibility:hidden;}&:hover svg{fill:var(--color-theme-500);visibility:visible;}", ""], {
22266
+ "justifyContent": "space-between"
22267
+ }, function (props) {
22268
+ return props.$active && styled.css(["", ";svg{fill:var(--color-primary);visibility:visible;}&:hover svg{fill:var(--color-primary);visibility:visible;}"], {
22269
+ "color": "var(--color-primary)"
22270
+ });
22271
+ });
22272
+ StyledListItem.displayName = "StyledListItem";
22273
+ var StyledListItemName = styled__default["default"].span.withConfig({
22274
+ displayName: "Styles__StyledListItemName",
22275
+ componentId: "sc-11r5ac9-8"
22276
+ })(["", ";"], {
22277
+ "overflow": "hidden",
22278
+ "textOverflow": "ellipsis",
22279
+ "whiteSpace": "nowrap"
22280
+ });
22281
+ StyledListItemName.displayName = "StyledListItemName";
22282
+
22283
+ var Sort = function Sort(_ref) {
22284
+ var label = _ref.label,
22285
+ icon = _ref.icon,
22286
+ options = _ref.options,
22287
+ selected = _ref.selected,
22288
+ onChange = _ref.onChange,
22289
+ target = _ref.target,
22290
+ className = _ref.className;
22291
+ var _useState = React.useState(false),
22292
+ _useState2 = _slicedToArray(_useState, 2),
22293
+ open = _useState2[0],
22294
+ setOpen = _useState2[1];
22295
+ var handleClose = React.useCallback(function () {
22296
+ return setOpen(false);
22297
+ }, []);
22298
+ var handleOpen = React.useCallback(function () {
22299
+ return setOpen(true);
22300
+ }, []);
22301
+ var handleOnChange = React.useCallback(function (event) {
22302
+ var nextSortBy = event.currentTarget.dataset.id;
22303
+ var nextOrder = selected.sortDirection === "desc" ? "asc" : "desc";
22304
+ if (nextSortBy !== selected.sortBy) {
22305
+ var _options$find;
22306
+ nextOrder = ((_options$find = options.find(function (opt) {
22307
+ return opt.id === nextSortBy;
22308
+ })) === null || _options$find === void 0 ? void 0 : _options$find.defaultDirection) || "asc";
22309
+ }
22310
+ onChange({
22311
+ sortBy: nextSortBy,
22312
+ sortDirection: nextOrder
22313
+ });
22314
+ }, [onChange, selected, options]);
22315
+ var labelText = React.useMemo(function () {
22316
+ var _options$find$name, _options$find2;
22317
+ return (_options$find$name = (_options$find2 = options.find(function (opt) {
22318
+ return opt.id === selected.sortBy;
22319
+ })) === null || _options$find2 === void 0 ? void 0 : _options$find2.name) !== null && _options$find$name !== void 0 ? _options$find$name : "";
22320
+ }, [selected.sortBy, options]);
22321
+ if (!labelText) {
22322
+ console.warn("Cannot find selected id in options.");
22323
+ }
22324
+ return /*#__PURE__*/React__default["default"].createElement(Menu, {
22325
+ onOpen: handleOpen,
22326
+ onClose: handleClose,
22327
+ position: "bottom-end",
22328
+ target: target || /*#__PURE__*/React__default["default"].createElement(StyledSortWrapper, {
22329
+ className: className
22330
+ }, /*#__PURE__*/React__default["default"].createElement(StyledValueButton, {
22331
+ active: open,
22332
+ value: labelText,
22333
+ label: label,
22334
+ "data-testid": "sort-button"
22335
+ }), /*#__PURE__*/React__default["default"].createElement(StyledIconButton, {
22336
+ active: open,
22337
+ variant: "text gray",
22338
+ "data-testid": "sort-icon-button"
22339
+ }, icon || /*#__PURE__*/React__default["default"].createElement(StyledSortIcon, null)))
22340
+ }, /*#__PURE__*/React__default["default"].createElement(StyledList, null, options.map(function (_ref2) {
22341
+ var id = _ref2.id,
22342
+ name = _ref2.name,
22343
+ defaultDirection = _ref2.defaultDirection;
22344
+ var showDownArrow = selected.sortDirection === "asc";
22345
+ if (selected.sortBy !== id) {
22346
+ showDownArrow = defaultDirection === "asc";
22347
+ }
22348
+ return /*#__PURE__*/React__default["default"].createElement(StyledListItem, {
22349
+ key: id,
22350
+ onClick: handleOnChange,
22351
+ "data-id": id,
22352
+ "data-testid": id,
22353
+ $active: id === selected.sortBy
22354
+ }, /*#__PURE__*/React__default["default"].createElement(StyledListItemName, null, name), showDownArrow ? /*#__PURE__*/React__default["default"].createElement(StyledSortIconDown, null) : /*#__PURE__*/React__default["default"].createElement(StyledSortIconUp, null));
22355
+ })));
22356
+ };
22357
+
22170
22358
  exports.AccessLogIcon = AccessLogIcon$1;
22171
22359
  exports.Accordion = Accordion;
22172
22360
  exports.AccordionContext = AccordionContext;
@@ -22462,6 +22650,7 @@
22462
22650
  exports.SlideFromTop = SlideFromTop;
22463
22651
  exports.SlideLeftRightTransition = SlideLeftRightTransition;
22464
22652
  exports.SmileIcon = SmileIcon$1;
22653
+ exports.Sort = Sort;
22465
22654
  exports.SortDirection = SortDirection;
22466
22655
  exports.SortGeneralIcon = SortGeneralIcon$1;
22467
22656
  exports.SortIcon = SortIcon$1;