yummies 7.19.4 → 7.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/assert.cjs +1 -1
  2. package/assert.cjs.map +1 -1
  3. package/assert.js +1 -1
  4. package/assert.js.map +1 -1
  5. package/async.cjs +147 -137
  6. package/async.cjs.map +1 -1
  7. package/async.d.ts +98 -131
  8. package/async.js +147 -137
  9. package/async.js.map +1 -1
  10. package/common.cjs +3 -1
  11. package/common.cjs.map +1 -1
  12. package/common.d.ts +18 -24
  13. package/common.js +3 -1
  14. package/common.js.map +1 -1
  15. package/complex.cjs +1 -0
  16. package/complex.cjs.map +1 -1
  17. package/complex.js +1 -0
  18. package/complex.js.map +1 -1
  19. package/cookie.cjs +1 -1
  20. package/cookie.cjs.map +1 -1
  21. package/cookie.d.ts +0 -18
  22. package/cookie.js +1 -1
  23. package/cookie.js.map +1 -1
  24. package/css-cx.cjs +78 -0
  25. package/css-cx.cjs.map +1 -0
  26. package/css-cx.d.ts +69 -0
  27. package/css-cx.js +74 -0
  28. package/css-cx.js.map +1 -0
  29. package/css.cjs +32 -111
  30. package/css.cjs.map +1 -1
  31. package/css.d.ts +32 -42
  32. package/css.js +30 -107
  33. package/css.js.map +1 -1
  34. package/data.cjs +60 -50
  35. package/data.cjs.map +1 -1
  36. package/data.d.ts +21 -34
  37. package/data.js +60 -50
  38. package/data.js.map +1 -1
  39. package/date-time.cjs +104 -98
  40. package/date-time.cjs.map +1 -1
  41. package/date-time.d.ts +51 -57
  42. package/date-time.js +104 -97
  43. package/date-time.js.map +1 -1
  44. package/device.cjs +14 -19
  45. package/device.cjs.map +1 -1
  46. package/device.d.ts +15 -26
  47. package/device.js +14 -19
  48. package/device.js.map +1 -1
  49. package/encodings.cjs +1 -1
  50. package/encodings.cjs.map +1 -1
  51. package/encodings.d.ts +0 -17
  52. package/encodings.js +1 -1
  53. package/encodings.js.map +1 -1
  54. package/errors.cjs +1 -18
  55. package/errors.cjs.map +1 -1
  56. package/errors.d.ts +0 -17
  57. package/errors.js +1 -17
  58. package/errors.js.map +1 -1
  59. package/file.cjs +3 -17
  60. package/file.cjs.map +1 -1
  61. package/file.d.ts +1 -16
  62. package/file.js +3 -17
  63. package/file.js.map +1 -1
  64. package/format.cjs +1 -1
  65. package/format.cjs.map +1 -1
  66. package/format.js +1 -1
  67. package/format.js.map +1 -1
  68. package/html.cjs +112 -175
  69. package/html.cjs.map +1 -1
  70. package/html.d.ts +58 -57
  71. package/html.js +111 -172
  72. package/html.js.map +1 -1
  73. package/id-nanoid.cjs +36 -0
  74. package/id-nanoid.cjs.map +1 -0
  75. package/id-nanoid.d.ts +26 -0
  76. package/id-nanoid.js +32 -0
  77. package/id-nanoid.js.map +1 -0
  78. package/id.cjs +10 -45
  79. package/id.cjs.map +1 -1
  80. package/id.d.ts +27 -36
  81. package/id.js +6 -40
  82. package/id.js.map +1 -1
  83. package/imports.cjs +3 -18
  84. package/imports.cjs.map +1 -1
  85. package/imports.d.ts +1 -16
  86. package/imports.js +3 -17
  87. package/imports.js.map +1 -1
  88. package/math.cjs +16 -12
  89. package/math.cjs.map +1 -1
  90. package/math.d.ts +9 -24
  91. package/math.js +16 -12
  92. package/math.js.map +1 -1
  93. package/media.cjs +88 -89
  94. package/media.cjs.map +1 -1
  95. package/media.d.ts +72 -80
  96. package/media.js +88 -88
  97. package/media.js.map +1 -1
  98. package/mobx.cjs +0 -1
  99. package/mobx.cjs.map +1 -1
  100. package/mobx.js.map +1 -1
  101. package/ms.cjs +3 -17
  102. package/ms.cjs.map +1 -1
  103. package/ms.d.ts +1 -16
  104. package/ms.js +3 -17
  105. package/ms.js.map +1 -1
  106. package/number.cjs +1 -17
  107. package/number.cjs.map +1 -1
  108. package/number.d.ts +0 -16
  109. package/number.js +1 -17
  110. package/number.js.map +1 -1
  111. package/package.json +6 -6
  112. package/parser.cjs +1 -1
  113. package/parser.cjs.map +1 -1
  114. package/parser.js +1 -1
  115. package/parser.js.map +1 -1
  116. package/price.cjs +1 -1
  117. package/price.cjs.map +1 -1
  118. package/price.d.ts +0 -16
  119. package/price.js +1 -1
  120. package/price.js.map +1 -1
  121. package/random.cjs +37 -39
  122. package/random.cjs.map +1 -1
  123. package/random.d.ts +31 -40
  124. package/random.js +37 -39
  125. package/random.js.map +1 -1
  126. package/react.cjs +0 -1
  127. package/react.cjs.map +1 -1
  128. package/react.js.map +1 -1
  129. package/sanitize-html.cjs +82 -0
  130. package/sanitize-html.cjs.map +1 -0
  131. package/sanitize-html.d.ts +28 -0
  132. package/sanitize-html.js +79 -0
  133. package/sanitize-html.js.map +1 -0
  134. package/sound.cjs +1 -17
  135. package/sound.cjs.map +1 -1
  136. package/sound.d.ts +0 -16
  137. package/sound.js +1 -17
  138. package/sound.js.map +1 -1
  139. package/storage.cjs +7 -5
  140. package/storage.cjs.map +1 -1
  141. package/storage.d.ts +3 -17
  142. package/storage.js +7 -5
  143. package/storage.js.map +1 -1
  144. package/text.cjs +3 -17
  145. package/text.cjs.map +1 -1
  146. package/text.d.ts +1 -16
  147. package/text.js +3 -17
  148. package/text.js.map +1 -1
  149. package/type-guard.cjs +38 -1
  150. package/type-guard.cjs.map +1 -1
  151. package/type-guard.d.ts +38 -0
  152. package/type-guard.js +38 -1
  153. package/type-guard.js.map +1 -1
  154. package/types.d.ts +20 -1
  155. package/types.global.d.ts +19 -0
  156. package/vibrate.cjs +1 -17
  157. package/vibrate.cjs.map +1 -1
  158. package/vibrate.d.ts +0 -16
  159. package/vibrate.js +1 -17
  160. package/vibrate.js.map +1 -1
  161. /package/{chunk-pbuEa-1d.js → chunk-D7D4PA-g.js} +0 -0
  162. /package/{chunk-CZWwpsFl.cjs → chunk-DakpK96I.cjs} +0 -0
package/encodings.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"encodings.cjs","names":[],"sources":["../src/encodings.ts"],"sourcesContent":["/**\n * ---header-docs-section---\n * # yummies/encodings\n *\n * ## Description\n *\n * String encoding utilities such as mapping Unicode text to legacy **Windows-1251** byte\n * sequences for interoperability with older backends or binary protocols. The helpers focus on\n * explicit transforms rather than implicit `TextEncoder` defaults so you can reason about output\n * in environments where charset mistakes are costly.\n *\n * ## Usage\n *\n * ```ts\n * import { unicodeToWin1251 } from \"yummies/encodings\";\n * ```\n */\n\nimport type { AnyObject } from 'yummies/types';\n\nconst DMap: AnyObject = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n 10: 10,\n 11: 11,\n 12: 12,\n 13: 13,\n 14: 14,\n 15: 15,\n 16: 16,\n 17: 17,\n 18: 18,\n 19: 19,\n 20: 20,\n 21: 21,\n 22: 22,\n 23: 23,\n 24: 24,\n 25: 25,\n 26: 26,\n 27: 27,\n 28: 28,\n 29: 29,\n 30: 30,\n 31: 31,\n 32: 32,\n 33: 33,\n 34: 34,\n 35: 35,\n 36: 36,\n 37: 37,\n 38: 38,\n 39: 39,\n 40: 40,\n 41: 41,\n 42: 42,\n 43: 43,\n 44: 44,\n 45: 45,\n 46: 46,\n 47: 47,\n 48: 48,\n 49: 49,\n 50: 50,\n 51: 51,\n 52: 52,\n 53: 53,\n 54: 54,\n 55: 55,\n 56: 56,\n 57: 57,\n 58: 58,\n 59: 59,\n 60: 60,\n 61: 61,\n 62: 62,\n 63: 63,\n 64: 64,\n 65: 65,\n 66: 66,\n 67: 67,\n 68: 68,\n 69: 69,\n 70: 70,\n 71: 71,\n 72: 72,\n 73: 73,\n 74: 74,\n 75: 75,\n 76: 76,\n 77: 77,\n 78: 78,\n 79: 79,\n 80: 80,\n 81: 81,\n 82: 82,\n 83: 83,\n 84: 84,\n 85: 85,\n 86: 86,\n 87: 87,\n 88: 88,\n 89: 89,\n 90: 90,\n 91: 91,\n 92: 92,\n 93: 93,\n 94: 94,\n 95: 95,\n 96: 96,\n 97: 97,\n 98: 98,\n 99: 99,\n 100: 100,\n 101: 101,\n 102: 102,\n 103: 103,\n 104: 104,\n 105: 105,\n 106: 106,\n 107: 107,\n 108: 108,\n 109: 109,\n 110: 110,\n 111: 111,\n 112: 112,\n 113: 113,\n 114: 114,\n 115: 115,\n 116: 116,\n 117: 117,\n 118: 118,\n 119: 119,\n 120: 120,\n 121: 121,\n 122: 122,\n 123: 123,\n 124: 124,\n 125: 125,\n 126: 126,\n 127: 127,\n 1027: 129,\n 8225: 135,\n 1046: 198,\n 8222: 132,\n 1047: 199,\n 1168: 165,\n 1048: 200,\n 1113: 154,\n 1049: 201,\n 1045: 197,\n 1050: 202,\n 1028: 170,\n 160: 160,\n 1040: 192,\n 1051: 203,\n 164: 164,\n 166: 166,\n 167: 167,\n 169: 169,\n 171: 171,\n 172: 172,\n 173: 173,\n 174: 174,\n 1053: 205,\n 176: 176,\n 177: 177,\n 1114: 156,\n 181: 181,\n 182: 182,\n 183: 183,\n 8221: 148,\n 187: 187,\n 1029: 189,\n 1056: 208,\n 1057: 209,\n 1058: 210,\n 8364: 136,\n 1112: 188,\n 1115: 158,\n 1059: 211,\n 1060: 212,\n 1030: 178,\n 1061: 213,\n 1062: 214,\n 1063: 215,\n 1116: 157,\n 1064: 216,\n 1065: 217,\n 1031: 175,\n 1066: 218,\n 1067: 219,\n 1068: 220,\n 1069: 221,\n 1070: 222,\n 1032: 163,\n 8226: 149,\n 1071: 223,\n 1072: 224,\n 8482: 153,\n 1073: 225,\n 8240: 137,\n 1118: 162,\n 1074: 226,\n 1110: 179,\n 8230: 133,\n 1075: 227,\n 1033: 138,\n 1076: 228,\n 1077: 229,\n 8211: 150,\n 1078: 230,\n 1119: 159,\n 1079: 231,\n 1042: 194,\n 1080: 232,\n 1034: 140,\n 1025: 168,\n 1081: 233,\n 1082: 234,\n 8212: 151,\n 1083: 235,\n 1169: 180,\n 1084: 236,\n 1052: 204,\n 1085: 237,\n 1035: 142,\n 1086: 238,\n 1087: 239,\n 1088: 240,\n 1089: 241,\n 1090: 242,\n 1036: 141,\n 1041: 193,\n 1091: 243,\n 1092: 244,\n 8224: 134,\n 1093: 245,\n 8470: 185,\n 1094: 246,\n 1054: 206,\n 1095: 247,\n 1096: 248,\n 8249: 139,\n 1097: 249,\n 1098: 250,\n 1044: 196,\n 1099: 251,\n 1111: 191,\n 1055: 207,\n 1100: 252,\n 1038: 161,\n 8220: 147,\n 1101: 253,\n 8250: 155,\n 1102: 254,\n 8216: 145,\n 1103: 255,\n 1043: 195,\n 1105: 184,\n 1039: 143,\n 1026: 128,\n 1106: 144,\n 8218: 130,\n 1107: 131,\n 8217: 146,\n 1108: 186,\n 1109: 190,\n};\n\n/**\n * Converts a Unicode string into a Win-1251 encoded binary string.\n *\n * @example\n * ```ts\n * unicodeToWin1251('Привет');\n * ```\n */\nexport function unicodeToWin1251(s: string) {\n const L = [];\n for (let i = 0; i < s.length; i++) {\n const ord = s.charCodeAt(i);\n if (!(ord in DMap))\n throw new Error(`Character ${s.charAt(i)} isn't supported by win1251!`);\n L.push(String.fromCharCode(DMap[ord]));\n }\n return L.join('');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"encodings.cjs","names":[],"sources":["../src/encodings/unicode-to-win1251.ts"],"sourcesContent":["import type { AnyObject } from 'yummies/types';\n\nconst DMap: AnyObject = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n 10: 10,\n 11: 11,\n 12: 12,\n 13: 13,\n 14: 14,\n 15: 15,\n 16: 16,\n 17: 17,\n 18: 18,\n 19: 19,\n 20: 20,\n 21: 21,\n 22: 22,\n 23: 23,\n 24: 24,\n 25: 25,\n 26: 26,\n 27: 27,\n 28: 28,\n 29: 29,\n 30: 30,\n 31: 31,\n 32: 32,\n 33: 33,\n 34: 34,\n 35: 35,\n 36: 36,\n 37: 37,\n 38: 38,\n 39: 39,\n 40: 40,\n 41: 41,\n 42: 42,\n 43: 43,\n 44: 44,\n 45: 45,\n 46: 46,\n 47: 47,\n 48: 48,\n 49: 49,\n 50: 50,\n 51: 51,\n 52: 52,\n 53: 53,\n 54: 54,\n 55: 55,\n 56: 56,\n 57: 57,\n 58: 58,\n 59: 59,\n 60: 60,\n 61: 61,\n 62: 62,\n 63: 63,\n 64: 64,\n 65: 65,\n 66: 66,\n 67: 67,\n 68: 68,\n 69: 69,\n 70: 70,\n 71: 71,\n 72: 72,\n 73: 73,\n 74: 74,\n 75: 75,\n 76: 76,\n 77: 77,\n 78: 78,\n 79: 79,\n 80: 80,\n 81: 81,\n 82: 82,\n 83: 83,\n 84: 84,\n 85: 85,\n 86: 86,\n 87: 87,\n 88: 88,\n 89: 89,\n 90: 90,\n 91: 91,\n 92: 92,\n 93: 93,\n 94: 94,\n 95: 95,\n 96: 96,\n 97: 97,\n 98: 98,\n 99: 99,\n 100: 100,\n 101: 101,\n 102: 102,\n 103: 103,\n 104: 104,\n 105: 105,\n 106: 106,\n 107: 107,\n 108: 108,\n 109: 109,\n 110: 110,\n 111: 111,\n 112: 112,\n 113: 113,\n 114: 114,\n 115: 115,\n 116: 116,\n 117: 117,\n 118: 118,\n 119: 119,\n 120: 120,\n 121: 121,\n 122: 122,\n 123: 123,\n 124: 124,\n 125: 125,\n 126: 126,\n 127: 127,\n 1027: 129,\n 8225: 135,\n 1046: 198,\n 8222: 132,\n 1047: 199,\n 1168: 165,\n 1048: 200,\n 1113: 154,\n 1049: 201,\n 1045: 197,\n 1050: 202,\n 1028: 170,\n 160: 160,\n 1040: 192,\n 1051: 203,\n 164: 164,\n 166: 166,\n 167: 167,\n 169: 169,\n 171: 171,\n 172: 172,\n 173: 173,\n 174: 174,\n 1053: 205,\n 176: 176,\n 177: 177,\n 1114: 156,\n 181: 181,\n 182: 182,\n 183: 183,\n 8221: 148,\n 187: 187,\n 1029: 189,\n 1056: 208,\n 1057: 209,\n 1058: 210,\n 8364: 136,\n 1112: 188,\n 1115: 158,\n 1059: 211,\n 1060: 212,\n 1030: 178,\n 1061: 213,\n 1062: 214,\n 1063: 215,\n 1116: 157,\n 1064: 216,\n 1065: 217,\n 1031: 175,\n 1066: 218,\n 1067: 219,\n 1068: 220,\n 1069: 221,\n 1070: 222,\n 1032: 163,\n 8226: 149,\n 1071: 223,\n 1072: 224,\n 8482: 153,\n 1073: 225,\n 8240: 137,\n 1118: 162,\n 1074: 226,\n 1110: 179,\n 8230: 133,\n 1075: 227,\n 1033: 138,\n 1076: 228,\n 1077: 229,\n 8211: 150,\n 1078: 230,\n 1119: 159,\n 1079: 231,\n 1042: 194,\n 1080: 232,\n 1034: 140,\n 1025: 168,\n 1081: 233,\n 1082: 234,\n 8212: 151,\n 1083: 235,\n 1169: 180,\n 1084: 236,\n 1052: 204,\n 1085: 237,\n 1035: 142,\n 1086: 238,\n 1087: 239,\n 1088: 240,\n 1089: 241,\n 1090: 242,\n 1036: 141,\n 1041: 193,\n 1091: 243,\n 1092: 244,\n 8224: 134,\n 1093: 245,\n 8470: 185,\n 1094: 246,\n 1054: 206,\n 1095: 247,\n 1096: 248,\n 8249: 139,\n 1097: 249,\n 1098: 250,\n 1044: 196,\n 1099: 251,\n 1111: 191,\n 1055: 207,\n 1100: 252,\n 1038: 161,\n 8220: 147,\n 1101: 253,\n 8250: 155,\n 1102: 254,\n 8216: 145,\n 1103: 255,\n 1043: 195,\n 1105: 184,\n 1039: 143,\n 1026: 128,\n 1106: 144,\n 8218: 130,\n 1107: 131,\n 8217: 146,\n 1108: 186,\n 1109: 190,\n};\n\n/**\n * Converts a Unicode string into a Win-1251 encoded binary string.\n *\n * @example\n * ```ts\n * unicodeToWin1251('Привет');\n * ```\n */\nexport function unicodeToWin1251(s: string) {\n const L = [];\n for (let i = 0; i < s.length; i++) {\n const ord = s.charCodeAt(i);\n if (!(ord in DMap))\n throw new Error(`Character ${s.charAt(i)} isn't supported by win1251!`);\n L.push(String.fromCharCode(DMap[ord]));\n }\n return L.join('');\n}\n"],"mappings":"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"}
package/encodings.d.ts CHANGED
@@ -1,20 +1,3 @@
1
- /**
2
- * ---header-docs-section---
3
- * # yummies/encodings
4
- *
5
- * ## Description
6
- *
7
- * String encoding utilities such as mapping Unicode text to legacy **Windows-1251** byte
8
- * sequences for interoperability with older backends or binary protocols. The helpers focus on
9
- * explicit transforms rather than implicit `TextEncoder` defaults so you can reason about output
10
- * in environments where charset mistakes are costly.
11
- *
12
- * ## Usage
13
- *
14
- * ```ts
15
- * import { unicodeToWin1251 } from "yummies/encodings";
16
- * ```
17
- */
18
1
  /**
19
2
  * Converts a Unicode string into a Win-1251 encoded binary string.
20
3
  *
package/encodings.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/encodings.ts
1
+ //#region src/encodings/unicode-to-win1251.ts
2
2
  var DMap = {
3
3
  0: 0,
4
4
  1: 1,
package/encodings.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"encodings.js","names":[],"sources":["../src/encodings.ts"],"sourcesContent":["/**\n * ---header-docs-section---\n * # yummies/encodings\n *\n * ## Description\n *\n * String encoding utilities such as mapping Unicode text to legacy **Windows-1251** byte\n * sequences for interoperability with older backends or binary protocols. The helpers focus on\n * explicit transforms rather than implicit `TextEncoder` defaults so you can reason about output\n * in environments where charset mistakes are costly.\n *\n * ## Usage\n *\n * ```ts\n * import { unicodeToWin1251 } from \"yummies/encodings\";\n * ```\n */\n\nimport type { AnyObject } from 'yummies/types';\n\nconst DMap: AnyObject = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n 10: 10,\n 11: 11,\n 12: 12,\n 13: 13,\n 14: 14,\n 15: 15,\n 16: 16,\n 17: 17,\n 18: 18,\n 19: 19,\n 20: 20,\n 21: 21,\n 22: 22,\n 23: 23,\n 24: 24,\n 25: 25,\n 26: 26,\n 27: 27,\n 28: 28,\n 29: 29,\n 30: 30,\n 31: 31,\n 32: 32,\n 33: 33,\n 34: 34,\n 35: 35,\n 36: 36,\n 37: 37,\n 38: 38,\n 39: 39,\n 40: 40,\n 41: 41,\n 42: 42,\n 43: 43,\n 44: 44,\n 45: 45,\n 46: 46,\n 47: 47,\n 48: 48,\n 49: 49,\n 50: 50,\n 51: 51,\n 52: 52,\n 53: 53,\n 54: 54,\n 55: 55,\n 56: 56,\n 57: 57,\n 58: 58,\n 59: 59,\n 60: 60,\n 61: 61,\n 62: 62,\n 63: 63,\n 64: 64,\n 65: 65,\n 66: 66,\n 67: 67,\n 68: 68,\n 69: 69,\n 70: 70,\n 71: 71,\n 72: 72,\n 73: 73,\n 74: 74,\n 75: 75,\n 76: 76,\n 77: 77,\n 78: 78,\n 79: 79,\n 80: 80,\n 81: 81,\n 82: 82,\n 83: 83,\n 84: 84,\n 85: 85,\n 86: 86,\n 87: 87,\n 88: 88,\n 89: 89,\n 90: 90,\n 91: 91,\n 92: 92,\n 93: 93,\n 94: 94,\n 95: 95,\n 96: 96,\n 97: 97,\n 98: 98,\n 99: 99,\n 100: 100,\n 101: 101,\n 102: 102,\n 103: 103,\n 104: 104,\n 105: 105,\n 106: 106,\n 107: 107,\n 108: 108,\n 109: 109,\n 110: 110,\n 111: 111,\n 112: 112,\n 113: 113,\n 114: 114,\n 115: 115,\n 116: 116,\n 117: 117,\n 118: 118,\n 119: 119,\n 120: 120,\n 121: 121,\n 122: 122,\n 123: 123,\n 124: 124,\n 125: 125,\n 126: 126,\n 127: 127,\n 1027: 129,\n 8225: 135,\n 1046: 198,\n 8222: 132,\n 1047: 199,\n 1168: 165,\n 1048: 200,\n 1113: 154,\n 1049: 201,\n 1045: 197,\n 1050: 202,\n 1028: 170,\n 160: 160,\n 1040: 192,\n 1051: 203,\n 164: 164,\n 166: 166,\n 167: 167,\n 169: 169,\n 171: 171,\n 172: 172,\n 173: 173,\n 174: 174,\n 1053: 205,\n 176: 176,\n 177: 177,\n 1114: 156,\n 181: 181,\n 182: 182,\n 183: 183,\n 8221: 148,\n 187: 187,\n 1029: 189,\n 1056: 208,\n 1057: 209,\n 1058: 210,\n 8364: 136,\n 1112: 188,\n 1115: 158,\n 1059: 211,\n 1060: 212,\n 1030: 178,\n 1061: 213,\n 1062: 214,\n 1063: 215,\n 1116: 157,\n 1064: 216,\n 1065: 217,\n 1031: 175,\n 1066: 218,\n 1067: 219,\n 1068: 220,\n 1069: 221,\n 1070: 222,\n 1032: 163,\n 8226: 149,\n 1071: 223,\n 1072: 224,\n 8482: 153,\n 1073: 225,\n 8240: 137,\n 1118: 162,\n 1074: 226,\n 1110: 179,\n 8230: 133,\n 1075: 227,\n 1033: 138,\n 1076: 228,\n 1077: 229,\n 8211: 150,\n 1078: 230,\n 1119: 159,\n 1079: 231,\n 1042: 194,\n 1080: 232,\n 1034: 140,\n 1025: 168,\n 1081: 233,\n 1082: 234,\n 8212: 151,\n 1083: 235,\n 1169: 180,\n 1084: 236,\n 1052: 204,\n 1085: 237,\n 1035: 142,\n 1086: 238,\n 1087: 239,\n 1088: 240,\n 1089: 241,\n 1090: 242,\n 1036: 141,\n 1041: 193,\n 1091: 243,\n 1092: 244,\n 8224: 134,\n 1093: 245,\n 8470: 185,\n 1094: 246,\n 1054: 206,\n 1095: 247,\n 1096: 248,\n 8249: 139,\n 1097: 249,\n 1098: 250,\n 1044: 196,\n 1099: 251,\n 1111: 191,\n 1055: 207,\n 1100: 252,\n 1038: 161,\n 8220: 147,\n 1101: 253,\n 8250: 155,\n 1102: 254,\n 8216: 145,\n 1103: 255,\n 1043: 195,\n 1105: 184,\n 1039: 143,\n 1026: 128,\n 1106: 144,\n 8218: 130,\n 1107: 131,\n 8217: 146,\n 1108: 186,\n 1109: 190,\n};\n\n/**\n * Converts a Unicode string into a Win-1251 encoded binary string.\n *\n * @example\n * ```ts\n * unicodeToWin1251('Привет');\n * ```\n */\nexport function unicodeToWin1251(s: string) {\n const L = [];\n for (let i = 0; i < s.length; i++) {\n const ord = s.charCodeAt(i);\n if (!(ord in DMap))\n throw new Error(`Character ${s.charAt(i)} isn't supported by win1251!`);\n L.push(String.fromCharCode(DMap[ord]));\n }\n return L.join('');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"encodings.js","names":[],"sources":["../src/encodings/unicode-to-win1251.ts"],"sourcesContent":["import type { AnyObject } from 'yummies/types';\n\nconst DMap: AnyObject = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n 10: 10,\n 11: 11,\n 12: 12,\n 13: 13,\n 14: 14,\n 15: 15,\n 16: 16,\n 17: 17,\n 18: 18,\n 19: 19,\n 20: 20,\n 21: 21,\n 22: 22,\n 23: 23,\n 24: 24,\n 25: 25,\n 26: 26,\n 27: 27,\n 28: 28,\n 29: 29,\n 30: 30,\n 31: 31,\n 32: 32,\n 33: 33,\n 34: 34,\n 35: 35,\n 36: 36,\n 37: 37,\n 38: 38,\n 39: 39,\n 40: 40,\n 41: 41,\n 42: 42,\n 43: 43,\n 44: 44,\n 45: 45,\n 46: 46,\n 47: 47,\n 48: 48,\n 49: 49,\n 50: 50,\n 51: 51,\n 52: 52,\n 53: 53,\n 54: 54,\n 55: 55,\n 56: 56,\n 57: 57,\n 58: 58,\n 59: 59,\n 60: 60,\n 61: 61,\n 62: 62,\n 63: 63,\n 64: 64,\n 65: 65,\n 66: 66,\n 67: 67,\n 68: 68,\n 69: 69,\n 70: 70,\n 71: 71,\n 72: 72,\n 73: 73,\n 74: 74,\n 75: 75,\n 76: 76,\n 77: 77,\n 78: 78,\n 79: 79,\n 80: 80,\n 81: 81,\n 82: 82,\n 83: 83,\n 84: 84,\n 85: 85,\n 86: 86,\n 87: 87,\n 88: 88,\n 89: 89,\n 90: 90,\n 91: 91,\n 92: 92,\n 93: 93,\n 94: 94,\n 95: 95,\n 96: 96,\n 97: 97,\n 98: 98,\n 99: 99,\n 100: 100,\n 101: 101,\n 102: 102,\n 103: 103,\n 104: 104,\n 105: 105,\n 106: 106,\n 107: 107,\n 108: 108,\n 109: 109,\n 110: 110,\n 111: 111,\n 112: 112,\n 113: 113,\n 114: 114,\n 115: 115,\n 116: 116,\n 117: 117,\n 118: 118,\n 119: 119,\n 120: 120,\n 121: 121,\n 122: 122,\n 123: 123,\n 124: 124,\n 125: 125,\n 126: 126,\n 127: 127,\n 1027: 129,\n 8225: 135,\n 1046: 198,\n 8222: 132,\n 1047: 199,\n 1168: 165,\n 1048: 200,\n 1113: 154,\n 1049: 201,\n 1045: 197,\n 1050: 202,\n 1028: 170,\n 160: 160,\n 1040: 192,\n 1051: 203,\n 164: 164,\n 166: 166,\n 167: 167,\n 169: 169,\n 171: 171,\n 172: 172,\n 173: 173,\n 174: 174,\n 1053: 205,\n 176: 176,\n 177: 177,\n 1114: 156,\n 181: 181,\n 182: 182,\n 183: 183,\n 8221: 148,\n 187: 187,\n 1029: 189,\n 1056: 208,\n 1057: 209,\n 1058: 210,\n 8364: 136,\n 1112: 188,\n 1115: 158,\n 1059: 211,\n 1060: 212,\n 1030: 178,\n 1061: 213,\n 1062: 214,\n 1063: 215,\n 1116: 157,\n 1064: 216,\n 1065: 217,\n 1031: 175,\n 1066: 218,\n 1067: 219,\n 1068: 220,\n 1069: 221,\n 1070: 222,\n 1032: 163,\n 8226: 149,\n 1071: 223,\n 1072: 224,\n 8482: 153,\n 1073: 225,\n 8240: 137,\n 1118: 162,\n 1074: 226,\n 1110: 179,\n 8230: 133,\n 1075: 227,\n 1033: 138,\n 1076: 228,\n 1077: 229,\n 8211: 150,\n 1078: 230,\n 1119: 159,\n 1079: 231,\n 1042: 194,\n 1080: 232,\n 1034: 140,\n 1025: 168,\n 1081: 233,\n 1082: 234,\n 8212: 151,\n 1083: 235,\n 1169: 180,\n 1084: 236,\n 1052: 204,\n 1085: 237,\n 1035: 142,\n 1086: 238,\n 1087: 239,\n 1088: 240,\n 1089: 241,\n 1090: 242,\n 1036: 141,\n 1041: 193,\n 1091: 243,\n 1092: 244,\n 8224: 134,\n 1093: 245,\n 8470: 185,\n 1094: 246,\n 1054: 206,\n 1095: 247,\n 1096: 248,\n 8249: 139,\n 1097: 249,\n 1098: 250,\n 1044: 196,\n 1099: 251,\n 1111: 191,\n 1055: 207,\n 1100: 252,\n 1038: 161,\n 8220: 147,\n 1101: 253,\n 8250: 155,\n 1102: 254,\n 8216: 145,\n 1103: 255,\n 1043: 195,\n 1105: 184,\n 1039: 143,\n 1026: 128,\n 1106: 144,\n 8218: 130,\n 1107: 131,\n 8217: 146,\n 1108: 186,\n 1109: 190,\n};\n\n/**\n * Converts a Unicode string into a Win-1251 encoded binary string.\n *\n * @example\n * ```ts\n * unicodeToWin1251('Привет');\n * ```\n */\nexport function unicodeToWin1251(s: string) {\n const L = [];\n for (let i = 0; i < s.length; i++) {\n const ord = s.charCodeAt(i);\n if (!(ord in DMap))\n throw new Error(`Character ${s.charAt(i)} isn't supported by win1251!`);\n L.push(String.fromCharCode(DMap[ord]));\n }\n return L.join('');\n}\n"],"mappings":"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"}
package/errors.cjs CHANGED
@@ -1,23 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("./chunk-CZWwpsFl.cjs");
3
2
  let yummies_type_guard = require("yummies/type-guard");
4
- //#region src/errors.ts
5
- /**
6
- * ---header-docs-section---
7
- * # yummies/errors
8
- *
9
- * ## Description
10
- *
11
- * Turns thrown values, `Error` objects, and unknown API failures into a single human-readable string
12
- * for toasts, forms, and logs. The default `getErrorText` can be extended with custom formatters and
13
- * enhancers so domain-specific errors still map to stable copy without try/catch boilerplate.
14
- *
15
- * ## Usage
16
- *
17
- * ```ts
18
- * import { getErrorText } from "yummies/errors";
19
- * ```
20
- */
3
+ //#region src/errors/get-error-text.ts
21
4
  /**
22
5
  * Universal function for transforming any errors into readable error text
23
6
  *
package/errors.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/**\n * ---header-docs-section---\n * # yummies/errors\n *\n * ## Description\n *\n * Turns thrown values, `Error` objects, and unknown API failures into a single human-readable string\n * for toasts, forms, and logs. The default `getErrorText` can be extended with custom formatters and\n * enhancers so domain-specific errors still map to stable copy without try/catch boilerplate.\n *\n * ## Usage\n *\n * ```ts\n * import { getErrorText } from \"yummies/errors\";\n * ```\n */\n\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAa,gBAAgB,UAAmB;AAC9C,KAAI,CAAC,MACH,QAAO,aAAa;AAGtB,KAAI,mBAAA,UAAU,SAAS,MAAM,CAC3B,QAAO,SAAS,aAAa;AAG/B,KAAI,iBAAiB,MACnB,SACG,aAAa,cAAc,MAAM,IAAI,MAAM,YAC5C,aAAa;AAIjB,KAAI,aAAa,QACf,QAAO,aAAa,QAAQ,MAAM,IAAI,aAAa;KAEnD,QAAO,aAAa;;AAIxB,aAAa,mBAAmB;AAChC,aAAa,cAAc;AAC3B,aAAa,UAAU"}
1
+ {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors/get-error-text.ts"],"sourcesContent":["import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"mappings":";;;;;;;;;;;AAcA,IAAa,gBAAgB,UAAmB;CAC9C,IAAI,CAAC,OACH,OAAO,aAAa;CAGtB,IAAI,mBAAA,UAAU,SAAS,KAAK,GAC1B,OAAO,SAAS,aAAa;CAG/B,IAAI,iBAAiB,OACnB,QACG,aAAa,cAAc,KAAK,KAAK,MAAM,YAC5C,aAAa;CAIjB,IAAI,aAAa,SACf,OAAO,aAAa,QAAQ,KAAK,KAAK,aAAa;MAEnD,OAAO,aAAa;AAExB;AAEA,aAAa,mBAAmB;AAChC,aAAa,cAAc;AAC3B,aAAa,UAAU"}
package/errors.d.ts CHANGED
@@ -1,22 +1,5 @@
1
1
  import { Maybe } from 'yummies/types';
2
2
 
3
- /**
4
- * ---header-docs-section---
5
- * # yummies/errors
6
- *
7
- * ## Description
8
- *
9
- * Turns thrown values, `Error` objects, and unknown API failures into a single human-readable string
10
- * for toasts, forms, and logs. The default `getErrorText` can be extended with custom formatters and
11
- * enhancers so domain-specific errors still map to stable copy without try/catch boilerplate.
12
- *
13
- * ## Usage
14
- *
15
- * ```ts
16
- * import { getErrorText } from "yummies/errors";
17
- * ```
18
- */
19
-
20
3
  type GetErrorTextEnhancer = (error: any) => string;
21
4
  type GetErrorTextFormatErrorFn = (error: Error) => string;
22
5
  /**
package/errors.js CHANGED
@@ -1,21 +1,5 @@
1
1
  import { typeGuard } from "yummies/type-guard";
2
- //#region src/errors.ts
3
- /**
4
- * ---header-docs-section---
5
- * # yummies/errors
6
- *
7
- * ## Description
8
- *
9
- * Turns thrown values, `Error` objects, and unknown API failures into a single human-readable string
10
- * for toasts, forms, and logs. The default `getErrorText` can be extended with custom formatters and
11
- * enhancers so domain-specific errors still map to stable copy without try/catch boilerplate.
12
- *
13
- * ## Usage
14
- *
15
- * ```ts
16
- * import { getErrorText } from "yummies/errors";
17
- * ```
18
- */
2
+ //#region src/errors/get-error-text.ts
19
3
  /**
20
4
  * Universal function for transforming any errors into readable error text
21
5
  *
package/errors.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/**\n * ---header-docs-section---\n * # yummies/errors\n *\n * ## Description\n *\n * Turns thrown values, `Error` objects, and unknown API failures into a single human-readable string\n * for toasts, forms, and logs. The default `getErrorText` can be extended with custom formatters and\n * enhancers so domain-specific errors still map to stable copy without try/catch boilerplate.\n *\n * ## Usage\n *\n * ```ts\n * import { getErrorText } from \"yummies/errors\";\n * ```\n */\n\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAa,gBAAgB,UAAmB;AAC9C,KAAI,CAAC,MACH,QAAO,aAAa;AAGtB,KAAI,UAAU,SAAS,MAAM,CAC3B,QAAO,SAAS,aAAa;AAG/B,KAAI,iBAAiB,MACnB,SACG,aAAa,cAAc,MAAM,IAAI,MAAM,YAC5C,aAAa;AAIjB,KAAI,aAAa,QACf,QAAO,aAAa,QAAQ,MAAM,IAAI,aAAa;KAEnD,QAAO,aAAa;;AAIxB,aAAa,mBAAmB;AAChC,aAAa,cAAc;AAC3B,aAAa,UAAU"}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors/get-error-text.ts"],"sourcesContent":["import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"mappings":";;;;;;;;;;AAcA,IAAa,gBAAgB,UAAmB;CAC9C,IAAI,CAAC,OACH,OAAO,aAAa;CAGtB,IAAI,UAAU,SAAS,KAAK,GAC1B,OAAO,SAAS,aAAa;CAG/B,IAAI,iBAAiB,OACnB,QACG,aAAa,cAAc,KAAK,KAAK,MAAM,YAC5C,aAAa;CAIjB,IAAI,aAAa,SACf,OAAO,aAAa,QAAQ,KAAK,KAAK,aAAa;MAEnD,OAAO,aAAa;AAExB;AAEA,aAAa,mBAAmB;AAChC,aAAa,cAAc;AAC3B,aAAa,UAAU"}
package/file.cjs CHANGED
@@ -1,21 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- //#region src/file.ts
3
- /**
4
- * ---header-docs-section---
5
- * # yummies/file
6
- *
7
- * ## Description
8
- *
9
- * Browser `File` helpers: reading contents as Base64 data URLs or plain text with optional
10
- * encoding. They wrap `FileReader` in promises so async flows stay linear and errors surface as
11
- * rejections. Handy for uploads, import wizards, and client-side parsing without extra libraries.
12
- *
13
- * ## Usage
14
- *
15
- * ```ts
16
- * import { getBase64FromFile } from "yummies/file";
17
- * ```
18
- */
2
+ //#region src/file/get-base64-from-file.ts
19
3
  /**
20
4
  * Reads a file as a Base64 data URL.
21
5
  *
@@ -36,6 +20,8 @@ var getBase64FromFile = (file) => {
36
20
  };
37
21
  });
38
22
  };
23
+ //#endregion
24
+ //#region src/file/get-text-from-file.ts
39
25
  /**
40
26
  * Reads a file as text using the provided encoding.
41
27
  *
package/file.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"file.cjs","names":[],"sources":["../src/file.ts"],"sourcesContent":["/**\n * ---header-docs-section---\n * # yummies/file\n *\n * ## Description\n *\n * Browser `File` helpers: reading contents as Base64 data URLs or plain text with optional\n * encoding. They wrap `FileReader` in promises so async flows stay linear and errors surface as\n * rejections. Handy for uploads, import wizards, and client-side parsing without extra libraries.\n *\n * ## Usage\n *\n * ```ts\n * import { getBase64FromFile } from \"yummies/file\";\n * ```\n */\n\n/**\n * Reads a file as a Base64 data URL.\n *\n * @example\n * ```ts\n * const value = await getBase64FromFile(file);\n * ```\n */\nexport const getBase64FromFile = (file: File) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n\n/**\n * Reads a file as text using the provided encoding.\n *\n * @example\n * ```ts\n * const text = await getTextFromFile(file, 'utf-8');\n * ```\n */\nexport const getTextFromFile = (file: File, encoding?: string) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, encoding);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,IAAa,qBAAqB,SAAe;AAC/C,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,YAAY;AAC/B,SAAO,cAAc,KAAK;AAC1B,SAAO,eAAe;AACpB,WAAQ,OAAO,OAAQ,UAAU,CAAC;;AAEpC,SAAO,WAAW,UAAU;AAC1B,UAAO,MAAM;;GAEf;;;;;;;;;;AAWJ,IAAa,mBAAmB,MAAY,aAAsB;AAChE,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,YAAY;AAC/B,SAAO,WAAW,MAAM,SAAS;AACjC,SAAO,eAAe;AACpB,WAAQ,OAAO,OAAQ,UAAU,CAAC;;AAEpC,SAAO,WAAW,UAAU;AAC1B,UAAO,MAAM;;GAEf"}
1
+ {"version":3,"file":"file.cjs","names":[],"sources":["../src/file/get-base64-from-file.ts","../src/file/get-text-from-file.ts"],"sourcesContent":["/**\n * Reads a file as a Base64 data URL.\n *\n * @example\n * ```ts\n * const value = await getBase64FromFile(file);\n * ```\n */\nexport const getBase64FromFile = (file: File) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n","/**\n * Reads a file as text using the provided encoding.\n *\n * @example\n * ```ts\n * const text = await getTextFromFile(file, 'utf-8');\n * ```\n */\nexport const getTextFromFile = (file: File, encoding?: string) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, encoding);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n"],"mappings":";;;;;;;;;;AAQA,IAAa,qBAAqB,SAAe;CAC/C,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,WAAW;EAC9B,OAAO,cAAc,IAAI;EACzB,OAAO,eAAe;GACpB,QAAQ,OAAO,OAAQ,SAAS,CAAC;EACnC;EACA,OAAO,WAAW,UAAU;GAC1B,OAAO,KAAK;EACd;CACF,CAAC;AACH;;;;;;;;;;;ACXA,IAAa,mBAAmB,MAAY,aAAsB;CAChE,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,WAAW;EAC9B,OAAO,WAAW,MAAM,QAAQ;EAChC,OAAO,eAAe;GACpB,QAAQ,OAAO,OAAQ,SAAS,CAAC;EACnC;EACA,OAAO,WAAW,UAAU;GAC1B,OAAO,KAAK;EACd;CACF,CAAC;AACH"}
package/file.d.ts CHANGED
@@ -1,19 +1,3 @@
1
- /**
2
- * ---header-docs-section---
3
- * # yummies/file
4
- *
5
- * ## Description
6
- *
7
- * Browser `File` helpers: reading contents as Base64 data URLs or plain text with optional
8
- * encoding. They wrap `FileReader` in promises so async flows stay linear and errors surface as
9
- * rejections. Handy for uploads, import wizards, and client-side parsing without extra libraries.
10
- *
11
- * ## Usage
12
- *
13
- * ```ts
14
- * import { getBase64FromFile } from "yummies/file";
15
- * ```
16
- */
17
1
  /**
18
2
  * Reads a file as a Base64 data URL.
19
3
  *
@@ -23,6 +7,7 @@
23
7
  * ```
24
8
  */
25
9
  declare const getBase64FromFile: (file: File) => Promise<string>;
10
+
26
11
  /**
27
12
  * Reads a file as text using the provided encoding.
28
13
  *
package/file.js CHANGED
@@ -1,20 +1,4 @@
1
- //#region src/file.ts
2
- /**
3
- * ---header-docs-section---
4
- * # yummies/file
5
- *
6
- * ## Description
7
- *
8
- * Browser `File` helpers: reading contents as Base64 data URLs or plain text with optional
9
- * encoding. They wrap `FileReader` in promises so async flows stay linear and errors surface as
10
- * rejections. Handy for uploads, import wizards, and client-side parsing without extra libraries.
11
- *
12
- * ## Usage
13
- *
14
- * ```ts
15
- * import { getBase64FromFile } from "yummies/file";
16
- * ```
17
- */
1
+ //#region src/file/get-base64-from-file.ts
18
2
  /**
19
3
  * Reads a file as a Base64 data URL.
20
4
  *
@@ -35,6 +19,8 @@ var getBase64FromFile = (file) => {
35
19
  };
36
20
  });
37
21
  };
22
+ //#endregion
23
+ //#region src/file/get-text-from-file.ts
38
24
  /**
39
25
  * Reads a file as text using the provided encoding.
40
26
  *
package/file.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","names":[],"sources":["../src/file.ts"],"sourcesContent":["/**\n * ---header-docs-section---\n * # yummies/file\n *\n * ## Description\n *\n * Browser `File` helpers: reading contents as Base64 data URLs or plain text with optional\n * encoding. They wrap `FileReader` in promises so async flows stay linear and errors surface as\n * rejections. Handy for uploads, import wizards, and client-side parsing without extra libraries.\n *\n * ## Usage\n *\n * ```ts\n * import { getBase64FromFile } from \"yummies/file\";\n * ```\n */\n\n/**\n * Reads a file as a Base64 data URL.\n *\n * @example\n * ```ts\n * const value = await getBase64FromFile(file);\n * ```\n */\nexport const getBase64FromFile = (file: File) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n\n/**\n * Reads a file as text using the provided encoding.\n *\n * @example\n * ```ts\n * const text = await getTextFromFile(file, 'utf-8');\n * ```\n */\nexport const getTextFromFile = (file: File, encoding?: string) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, encoding);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,IAAa,qBAAqB,SAAe;AAC/C,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,YAAY;AAC/B,SAAO,cAAc,KAAK;AAC1B,SAAO,eAAe;AACpB,WAAQ,OAAO,OAAQ,UAAU,CAAC;;AAEpC,SAAO,WAAW,UAAU;AAC1B,UAAO,MAAM;;GAEf;;;;;;;;;;AAWJ,IAAa,mBAAmB,MAAY,aAAsB;AAChE,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,YAAY;AAC/B,SAAO,WAAW,MAAM,SAAS;AACjC,SAAO,eAAe;AACpB,WAAQ,OAAO,OAAQ,UAAU,CAAC;;AAEpC,SAAO,WAAW,UAAU;AAC1B,UAAO,MAAM;;GAEf"}
1
+ {"version":3,"file":"file.js","names":[],"sources":["../src/file/get-base64-from-file.ts","../src/file/get-text-from-file.ts"],"sourcesContent":["/**\n * Reads a file as a Base64 data URL.\n *\n * @example\n * ```ts\n * const value = await getBase64FromFile(file);\n * ```\n */\nexport const getBase64FromFile = (file: File) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n","/**\n * Reads a file as text using the provided encoding.\n *\n * @example\n * ```ts\n * const text = await getTextFromFile(file, 'utf-8');\n * ```\n */\nexport const getTextFromFile = (file: File, encoding?: string) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, encoding);\n reader.onload = () => {\n resolve(reader.result!.toString());\n };\n reader.onerror = (error) => {\n reject(error);\n };\n });\n};\n"],"mappings":";;;;;;;;;AAQA,IAAa,qBAAqB,SAAe;CAC/C,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,WAAW;EAC9B,OAAO,cAAc,IAAI;EACzB,OAAO,eAAe;GACpB,QAAQ,OAAO,OAAQ,SAAS,CAAC;EACnC;EACA,OAAO,WAAW,UAAU;GAC1B,OAAO,KAAK;EACd;CACF,CAAC;AACH;;;;;;;;;;;ACXA,IAAa,mBAAmB,MAAY,aAAsB;CAChE,OAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,WAAW;EAC9B,OAAO,WAAW,MAAM,QAAQ;EAChC,OAAO,eAAe;GACpB,QAAQ,OAAO,OAAQ,SAAS,CAAC;EACnC;EACA,OAAO,WAAW,UAAU;GAC1B,OAAO,KAAK;EACd;CACF,CAAC;AACH"}
package/format.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_chunk = require("./chunk-CZWwpsFl.cjs");
2
+ const require_chunk = require("./chunk-DakpK96I.cjs");
3
3
  let yummies_parser = require("yummies/parser");
4
4
  let yummies_type_guard = require("yummies/type-guard");
5
5
  //#region src/format/number.ts
package/format.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"format.cjs","names":[],"sources":["../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts","../src/format/_exports.ts"],"sourcesContent":["import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n cropDigitsOnly?: boolean;\n}\n\n/**\n * Formats a numeric value with thousands separators, fractional digit control\n * and optional postfix text.\n *\n * Invalid, empty or unsupported values fall back to `emptyText`.\n *\n * @param rawValue Number or numeric string to format.\n * @param userSettings Formatting overrides merged with `number.defaultSettings`.\n * @returns Formatted number string or fallback text.\n *\n * @example\n * ```ts\n * number(12000); // '12 000'\n * ```\n *\n * @example\n * ```ts\n * number(12.5, { digits: 1, postfix: '%' }); // '12.5%'\n * ```\n */\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n if (settings.cropDigitsOnly) {\n const [integerPart, decimalPart] = `${raw}`.split('.');\n const leftPart = integerPart;\n const rightPart = (decimalPart || '')\n .slice(0, digits)\n .padEnd(digits, '0');\n\n if (rightPart) {\n raw = `${leftPart}.${rightPart}`;\n } else {\n raw = leftPart;\n }\n } else {\n raw = value.toFixed(digits);\n }\n }\n\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<parser.NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * Formats a value as a percent string with configurable decimal precision,\n * decimal divider and suffix symbol.\n *\n * @param value Number or numeric string to format.\n * @param settings Parser and formatting options.\n * @returns Formatted percent string or fallback text for invalid values.\n *\n * @example\n * ```ts\n * percent(12.345); // '12.35%'\n * ```\n *\n * @example\n * ```ts\n * percent(12.345, { divider: ',', symbol: ' pct' }); // '12,35 pct'\n * ```\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = parser.number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all whitespace characters from a string.\n *\n * @param value Source string.\n * @returns String without spaces, tabs and line breaks.\n *\n * @example\n * ```ts\n * skipSpaces('1 000 000'); // '1000000'\n * ```\n *\n * @example\n * ```ts\n * skipSpaces('a\\tb\\nc'); // 'abc'\n * ```\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n","/**\n * ---header-docs-section---\n * # yummies/format\n *\n * ## Description\n *\n * Namespace-style **number, percent, and string** formatting for UI tables, inputs, and charts.\n * Submodules cover locale-aware numbers, percent parsing/formatting, trimming helpers, and shared\n * constants so presentation rules stay centralized and tree-shakable behind the package\n * aggregated **format** export from this entry point.\n *\n * ## Usage\n *\n * ```ts\n * import { format } from \"yummies/format\";\n * ```\n */\n\nexport * from './constants.js';\nexport * from './number.js';\nexport * from './percent.js';\nexport * from './skip-spaces.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,IAAa,UACX,UACA,iBACW;CACX,MAAM,WAAW;EACf,GAAG,OAAO;EACV,GAAG;EACJ;CAED,MAAM,SAAS,SAAS,UAAU;CAClC,MAAM,WAAW,UAAU,YAAY;CACvC,MAAM,YAAY,SAAS,aAAa;CACxC,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,YAAY,SAAS,aAAA;CAC3B,MAAM,qBAAqB,SAAS,sBAAsB;CAE1D,IAAI;AAEJ,KAAI,mBAAA,UAAU,SAAS,SAAS,CAC9B,SAAQ,eAAA,OAAO,OAAO,OAAO,EAAE,UAAU,KAAA,GAAW,CAAC;KAErD,SAAQ;AAGV,KAAI,mBAAA,UAAU,SAAS,MAAM,EAAE;EAC7B,IAAI,MAAc,GAAG;AAErB,MAAI,WAAW,MACb,KAAI,SAAS,gBAAgB;GAC3B,MAAM,CAAC,aAAa,eAAe,GAAG,MAAM,MAAM,IAAI;GACtD,MAAM,WAAW;GACjB,MAAM,aAAa,eAAe,IAC/B,MAAM,GAAG,OAAO,CAChB,OAAO,QAAQ,IAAI;AAEtB,OAAI,UACF,OAAM,GAAG,SAAS,GAAG;OAErB,OAAM;QAGR,OAAM,MAAM,QAAQ,OAAO;AAI/B,MAAI,SACF,OAAM,GAAG,CAAC;EAGZ,MAAM,CAAC,aAAa,eAAe,IAAI,MAAM,KAAK,EAAE;EAEpD,IAAI,uBAAuB;EAC3B,IAAI,uBAAuB;AAE3B,MAAI,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,KAAK,YAAY,EAClE,wBAAuB,IAAI;EAG7B,MAAM,MAAM;AAEZ,SAAO,IAAI,KAAK,qBAAqB,IAAI,UACvC,wBAAuB,qBAAqB,QAC1C,KACA,KAAK,UAAU,IAChB;AAGH,SAAO,uBAAuB,uBAAuB;;AAGvD,QAAO;;AAGT,OAAO,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;AClG3B,IAAa,WACX,OACA,aACG;CACH,MAAM,eAAe,eAAA,OAAO,OAAO,OAAO;EACxC,GAAG;EACH,QAAQ,UAAU,UAAU;EAC5B,UAAU;EACX,CAAC;AAEF,KAAI,mBAAA,UAAU,SAAS,aAAa,EAAE;EACpC,MAAM,UAAU,UAAU,WAAW;AAKrC,SAAO,GAFL,YAAY,MAAM,eAAe,GAAG,eAAe,QAAQ,KAAK,QAAQ,GAE7C,UAAU,aAAa,KAAK,UAAU,UAAU;OAE7E,QAAO,UAAU,aAAA;;;;;;;;;;;;;;;;;;;;AClCrB,IAAa,cAAc,UAAkB,MAAM,WAAW,OAAO,GAAG"}
1
+ {"version":3,"file":"format.cjs","names":[],"sources":["../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts","../src/format/_exports.ts"],"sourcesContent":["import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n cropDigitsOnly?: boolean;\n}\n\n/**\n * Formats a numeric value with thousands separators, fractional digit control\n * and optional postfix text.\n *\n * Invalid, empty or unsupported values fall back to `emptyText`.\n *\n * @param rawValue Number or numeric string to format.\n * @param userSettings Formatting overrides merged with `number.defaultSettings`.\n * @returns Formatted number string or fallback text.\n *\n * @example\n * ```ts\n * number(12000); // '12 000'\n * ```\n *\n * @example\n * ```ts\n * number(12.5, { digits: 1, postfix: '%' }); // '12.5%'\n * ```\n */\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n if (settings.cropDigitsOnly) {\n const [integerPart, decimalPart] = `${raw}`.split('.');\n const leftPart = integerPart;\n const rightPart = (decimalPart || '')\n .slice(0, digits)\n .padEnd(digits, '0');\n\n if (rightPart) {\n raw = `${leftPart}.${rightPart}`;\n } else {\n raw = leftPart;\n }\n } else {\n raw = value.toFixed(digits);\n }\n }\n\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<parser.NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * Formats a value as a percent string with configurable decimal precision,\n * decimal divider and suffix symbol.\n *\n * @param value Number or numeric string to format.\n * @param settings Parser and formatting options.\n * @returns Formatted percent string or fallback text for invalid values.\n *\n * @example\n * ```ts\n * percent(12.345); // '12.35%'\n * ```\n *\n * @example\n * ```ts\n * percent(12.345, { divider: ',', symbol: ' pct' }); // '12,35 pct'\n * ```\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = parser.number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all whitespace characters from a string.\n *\n * @param value Source string.\n * @returns String without spaces, tabs and line breaks.\n *\n * @example\n * ```ts\n * skipSpaces('1 000 000'); // '1000000'\n * ```\n *\n * @example\n * ```ts\n * skipSpaces('a\\tb\\nc'); // 'abc'\n * ```\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n","/**\n * ---header-docs-section---\n * # yummies/format\n *\n * ## Description\n *\n * Namespace-style **number, percent, and string** formatting for UI tables, inputs, and charts.\n * Submodules cover locale-aware numbers, percent parsing/formatting, trimming helpers, and shared\n * constants so presentation rules stay centralized and tree-shakable behind the package\n * aggregated **format** export from this entry point.\n *\n * ## Usage\n *\n * ```ts\n * import { format } from \"yummies/format\";\n * ```\n */\n\nexport * from './constants.js';\nexport * from './number.js';\nexport * from './percent.js';\nexport * from './skip-spaces.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,IAAa,UACX,UACA,iBACW;CACX,MAAM,WAAW;EACf,GAAG,OAAO;EACV,GAAG;CACL;CAEA,MAAM,SAAS,SAAS,UAAU;CAClC,MAAM,WAAW,UAAU,YAAY;CACvC,MAAM,YAAY,SAAS,aAAa;CACxC,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,YAAY,SAAS,aAAA;CAC3B,MAAM,qBAAqB,SAAS,sBAAsB;CAE1D,IAAI;CAEJ,IAAI,mBAAA,UAAU,SAAS,QAAQ,GAC7B,QAAQ,eAAA,OAAO,OAAO,OAAO,EAAE,UAAU,KAAA,EAAU,CAAC;MAEpD,QAAQ;CAGV,IAAI,mBAAA,UAAU,SAAS,KAAK,GAAG;EAC7B,IAAI,MAAc,GAAG;EAErB,IAAI,WAAW,OACb,IAAI,SAAS,gBAAgB;GAC3B,MAAM,CAAC,aAAa,eAAe,GAAG,MAAM,MAAM,GAAG;GACrD,MAAM,WAAW;GACjB,MAAM,aAAa,eAAe,IAC/B,MAAM,GAAG,MAAM,EACf,OAAO,QAAQ,GAAG;GAErB,IAAI,WACF,MAAM,GAAG,SAAS,GAAG;QAErB,MAAM;EAEV,OACE,MAAM,MAAM,QAAQ,MAAM;EAI9B,IAAI,UACF,MAAM,GAAG,CAAC;EAGZ,MAAM,CAAC,aAAa,eAAe,IAAI,MAAM,KAAK,CAAC;EAEnD,IAAI,uBAAuB;EAC3B,IAAI,uBAAuB;EAE3B,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,KAAK,WAAW,IACjE,uBAAuB,IAAI;EAG7B,MAAM,MAAM;EAEZ,OAAO,IAAI,KAAK,oBAAoB,KAAK,WACvC,uBAAuB,qBAAqB,QAC1C,KACA,KAAK,UAAU,GACjB;EAGF,OAAO,uBAAuB,uBAAuB;CACvD;CAEA,OAAO;AACT;AAEA,OAAO,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;AClG1B,IAAa,WACX,OACA,aACG;CACH,MAAM,eAAe,eAAA,OAAO,OAAO,OAAO;EACxC,GAAG;EACH,QAAQ,UAAU,UAAU;EAC5B,UAAU;CACZ,CAAC;CAED,IAAI,mBAAA,UAAU,SAAS,YAAY,GAAG;EACpC,MAAM,UAAU,UAAU,WAAW;EAKrC,OAAO,GAFL,YAAY,MAAM,eAAe,GAAG,eAAe,QAAQ,KAAK,OAAO,IAE5C,UAAU,aAAa,KAAK,UAAU,UAAU;CAC/E,OACE,OAAO,UAAU,aAAA;AAErB;;;;;;;;;;;;;;;;;;;ACpCA,IAAa,cAAc,UAAkB,MAAM,WAAW,OAAO,EAAE"}
package/format.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as __exportAll } from "./chunk-pbuEa-1d.js";
1
+ import { t as __exportAll } from "./chunk-D7D4PA-g.js";
2
2
  import { parser } from "yummies/parser";
3
3
  import { typeGuard } from "yummies/type-guard";
4
4
  //#region src/format/number.ts
package/format.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":[],"sources":["../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts","../src/format/_exports.ts"],"sourcesContent":["import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n cropDigitsOnly?: boolean;\n}\n\n/**\n * Formats a numeric value with thousands separators, fractional digit control\n * and optional postfix text.\n *\n * Invalid, empty or unsupported values fall back to `emptyText`.\n *\n * @param rawValue Number or numeric string to format.\n * @param userSettings Formatting overrides merged with `number.defaultSettings`.\n * @returns Formatted number string or fallback text.\n *\n * @example\n * ```ts\n * number(12000); // '12 000'\n * ```\n *\n * @example\n * ```ts\n * number(12.5, { digits: 1, postfix: '%' }); // '12.5%'\n * ```\n */\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n if (settings.cropDigitsOnly) {\n const [integerPart, decimalPart] = `${raw}`.split('.');\n const leftPart = integerPart;\n const rightPart = (decimalPart || '')\n .slice(0, digits)\n .padEnd(digits, '0');\n\n if (rightPart) {\n raw = `${leftPart}.${rightPart}`;\n } else {\n raw = leftPart;\n }\n } else {\n raw = value.toFixed(digits);\n }\n }\n\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<parser.NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * Formats a value as a percent string with configurable decimal precision,\n * decimal divider and suffix symbol.\n *\n * @param value Number or numeric string to format.\n * @param settings Parser and formatting options.\n * @returns Formatted percent string or fallback text for invalid values.\n *\n * @example\n * ```ts\n * percent(12.345); // '12.35%'\n * ```\n *\n * @example\n * ```ts\n * percent(12.345, { divider: ',', symbol: ' pct' }); // '12,35 pct'\n * ```\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = parser.number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all whitespace characters from a string.\n *\n * @param value Source string.\n * @returns String without spaces, tabs and line breaks.\n *\n * @example\n * ```ts\n * skipSpaces('1 000 000'); // '1000000'\n * ```\n *\n * @example\n * ```ts\n * skipSpaces('a\\tb\\nc'); // 'abc'\n * ```\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n","/**\n * ---header-docs-section---\n * # yummies/format\n *\n * ## Description\n *\n * Namespace-style **number, percent, and string** formatting for UI tables, inputs, and charts.\n * Submodules cover locale-aware numbers, percent parsing/formatting, trimming helpers, and shared\n * constants so presentation rules stay centralized and tree-shakable behind the package\n * aggregated **format** export from this entry point.\n *\n * ## Usage\n *\n * ```ts\n * import { format } from \"yummies/format\";\n * ```\n */\n\nexport * from './constants.js';\nexport * from './number.js';\nexport * from './percent.js';\nexport * from './skip-spaces.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyDA,IAAa,UACX,UACA,iBACW;CACX,MAAM,WAAW;EACf,GAAG,OAAO;EACV,GAAG;EACJ;CAED,MAAM,SAAS,SAAS,UAAU;CAClC,MAAM,WAAW,UAAU,YAAY;CACvC,MAAM,YAAY,SAAS,aAAa;CACxC,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,YAAY,SAAS,aAAA;CAC3B,MAAM,qBAAqB,SAAS,sBAAsB;CAE1D,IAAI;AAEJ,KAAI,UAAU,SAAS,SAAS,CAC9B,SAAQ,OAAO,OAAO,OAAO,EAAE,UAAU,KAAA,GAAW,CAAC;KAErD,SAAQ;AAGV,KAAI,UAAU,SAAS,MAAM,EAAE;EAC7B,IAAI,MAAc,GAAG;AAErB,MAAI,WAAW,MACb,KAAI,SAAS,gBAAgB;GAC3B,MAAM,CAAC,aAAa,eAAe,GAAG,MAAM,MAAM,IAAI;GACtD,MAAM,WAAW;GACjB,MAAM,aAAa,eAAe,IAC/B,MAAM,GAAG,OAAO,CAChB,OAAO,QAAQ,IAAI;AAEtB,OAAI,UACF,OAAM,GAAG,SAAS,GAAG;OAErB,OAAM;QAGR,OAAM,MAAM,QAAQ,OAAO;AAI/B,MAAI,SACF,OAAM,GAAG,CAAC;EAGZ,MAAM,CAAC,aAAa,eAAe,IAAI,MAAM,KAAK,EAAE;EAEpD,IAAI,uBAAuB;EAC3B,IAAI,uBAAuB;AAE3B,MAAI,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,KAAK,YAAY,EAClE,wBAAuB,IAAI;EAG7B,MAAM,MAAM;AAEZ,SAAO,IAAI,KAAK,qBAAqB,IAAI,UACvC,wBAAuB,qBAAqB,QAC1C,KACA,KAAK,UAAU,IAChB;AAGH,SAAO,uBAAuB,uBAAuB;;AAGvD,QAAO;;AAGT,OAAO,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;AClG3B,IAAa,WACX,OACA,aACG;CACH,MAAM,eAAe,OAAO,OAAO,OAAO;EACxC,GAAG;EACH,QAAQ,UAAU,UAAU;EAC5B,UAAU;EACX,CAAC;AAEF,KAAI,UAAU,SAAS,aAAa,EAAE;EACpC,MAAM,UAAU,UAAU,WAAW;AAKrC,SAAO,GAFL,YAAY,MAAM,eAAe,GAAG,eAAe,QAAQ,KAAK,QAAQ,GAE7C,UAAU,aAAa,KAAK,UAAU,UAAU;OAE7E,QAAO,UAAU,aAAA;;;;;;;;;;;;;;;;;;;;AClCrB,IAAa,cAAc,UAAkB,MAAM,WAAW,OAAO,GAAG"}
1
+ {"version":3,"file":"format.js","names":[],"sources":["../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts","../src/format/_exports.ts"],"sourcesContent":["import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n cropDigitsOnly?: boolean;\n}\n\n/**\n * Formats a numeric value with thousands separators, fractional digit control\n * and optional postfix text.\n *\n * Invalid, empty or unsupported values fall back to `emptyText`.\n *\n * @param rawValue Number or numeric string to format.\n * @param userSettings Formatting overrides merged with `number.defaultSettings`.\n * @returns Formatted number string or fallback text.\n *\n * @example\n * ```ts\n * number(12000); // '12 000'\n * ```\n *\n * @example\n * ```ts\n * number(12.5, { digits: 1, postfix: '%' }); // '12.5%'\n * ```\n */\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n if (settings.cropDigitsOnly) {\n const [integerPart, decimalPart] = `${raw}`.split('.');\n const leftPart = integerPart;\n const rightPart = (decimalPart || '')\n .slice(0, digits)\n .padEnd(digits, '0');\n\n if (rightPart) {\n raw = `${leftPart}.${rightPart}`;\n } else {\n raw = leftPart;\n }\n } else {\n raw = value.toFixed(digits);\n }\n }\n\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<parser.NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * Formats a value as a percent string with configurable decimal precision,\n * decimal divider and suffix symbol.\n *\n * @param value Number or numeric string to format.\n * @param settings Parser and formatting options.\n * @returns Formatted percent string or fallback text for invalid values.\n *\n * @example\n * ```ts\n * percent(12.345); // '12.35%'\n * ```\n *\n * @example\n * ```ts\n * percent(12.345, { divider: ',', symbol: ' pct' }); // '12,35 pct'\n * ```\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = parser.number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all whitespace characters from a string.\n *\n * @param value Source string.\n * @returns String without spaces, tabs and line breaks.\n *\n * @example\n * ```ts\n * skipSpaces('1 000 000'); // '1000000'\n * ```\n *\n * @example\n * ```ts\n * skipSpaces('a\\tb\\nc'); // 'abc'\n * ```\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n","/**\n * ---header-docs-section---\n * # yummies/format\n *\n * ## Description\n *\n * Namespace-style **number, percent, and string** formatting for UI tables, inputs, and charts.\n * Submodules cover locale-aware numbers, percent parsing/formatting, trimming helpers, and shared\n * constants so presentation rules stay centralized and tree-shakable behind the package\n * aggregated **format** export from this entry point.\n *\n * ## Usage\n *\n * ```ts\n * import { format } from \"yummies/format\";\n * ```\n */\n\nexport * from './constants.js';\nexport * from './number.js';\nexport * from './percent.js';\nexport * from './skip-spaces.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyDA,IAAa,UACX,UACA,iBACW;CACX,MAAM,WAAW;EACf,GAAG,OAAO;EACV,GAAG;CACL;CAEA,MAAM,SAAS,SAAS,UAAU;CAClC,MAAM,WAAW,UAAU,YAAY;CACvC,MAAM,YAAY,SAAS,aAAa;CACxC,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,YAAY,SAAS,aAAA;CAC3B,MAAM,qBAAqB,SAAS,sBAAsB;CAE1D,IAAI;CAEJ,IAAI,UAAU,SAAS,QAAQ,GAC7B,QAAQ,OAAO,OAAO,OAAO,EAAE,UAAU,KAAA,EAAU,CAAC;MAEpD,QAAQ;CAGV,IAAI,UAAU,SAAS,KAAK,GAAG;EAC7B,IAAI,MAAc,GAAG;EAErB,IAAI,WAAW,OACb,IAAI,SAAS,gBAAgB;GAC3B,MAAM,CAAC,aAAa,eAAe,GAAG,MAAM,MAAM,GAAG;GACrD,MAAM,WAAW;GACjB,MAAM,aAAa,eAAe,IAC/B,MAAM,GAAG,MAAM,EACf,OAAO,QAAQ,GAAG;GAErB,IAAI,WACF,MAAM,GAAG,SAAS,GAAG;QAErB,MAAM;EAEV,OACE,MAAM,MAAM,QAAQ,MAAM;EAI9B,IAAI,UACF,MAAM,GAAG,CAAC;EAGZ,MAAM,CAAC,aAAa,eAAe,IAAI,MAAM,KAAK,CAAC;EAEnD,IAAI,uBAAuB;EAC3B,IAAI,uBAAuB;EAE3B,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,KAAK,WAAW,IACjE,uBAAuB,IAAI;EAG7B,MAAM,MAAM;EAEZ,OAAO,IAAI,KAAK,oBAAoB,KAAK,WACvC,uBAAuB,qBAAqB,QAC1C,KACA,KAAK,UAAU,GACjB;EAGF,OAAO,uBAAuB,uBAAuB;CACvD;CAEA,OAAO;AACT;AAEA,OAAO,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;AClG1B,IAAa,WACX,OACA,aACG;CACH,MAAM,eAAe,OAAO,OAAO,OAAO;EACxC,GAAG;EACH,QAAQ,UAAU,UAAU;EAC5B,UAAU;CACZ,CAAC;CAED,IAAI,UAAU,SAAS,YAAY,GAAG;EACpC,MAAM,UAAU,UAAU,WAAW;EAKrC,OAAO,GAFL,YAAY,MAAM,eAAe,GAAG,eAAe,QAAQ,KAAK,OAAO,IAE5C,UAAU,aAAa,KAAK,UAAU,UAAU;CAC/E,OACE,OAAO,UAAU,aAAA;AAErB;;;;;;;;;;;;;;;;;;;ACpCA,IAAa,cAAc,UAAkB,MAAM,WAAW,OAAO,EAAE"}