@skbkontur/react-ui 4.5.3 → 4.6.0

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/CHANGELOG.md +22 -0
  2. package/cjs/components/CurrencyInput/CurrencyHelper.js +1 -1
  3. package/cjs/components/CurrencyInput/CurrencyHelper.js.map +1 -1
  4. package/cjs/components/CurrencyInput/constants.d.ts +3 -0
  5. package/cjs/components/CurrencyInput/constants.js +6 -2
  6. package/cjs/components/CurrencyInput/constants.js.map +1 -1
  7. package/cjs/components/CurrencyLabel/CurrencyLabel.d.ts +3 -1
  8. package/cjs/components/CurrencyLabel/CurrencyLabel.js +6 -3
  9. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  10. package/cjs/components/CurrencyLabel/CurrencyLabel.md +6 -0
  11. package/cjs/components/DropdownMenu/DropdownMenu.md +38 -0
  12. package/cjs/components/Input/Input.js +6 -1
  13. package/cjs/components/Input/Input.js.map +1 -1
  14. package/cjs/components/MenuItem/MenuItem.d.ts +6 -0
  15. package/cjs/components/MenuItem/MenuItem.js +12 -2
  16. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  17. package/cjs/components/SidePage/SidePage.d.ts +5 -0
  18. package/cjs/components/SidePage/SidePage.js +9 -1
  19. package/cjs/components/SidePage/SidePage.js.map +1 -1
  20. package/cjs/components/SidePage/SidePageBody.d.ts +1 -0
  21. package/cjs/components/SidePage/SidePageBody.js +11 -6
  22. package/cjs/components/SidePage/SidePageBody.js.map +1 -1
  23. package/cjs/internal/InternalMenu/InternalMenu.d.ts +1 -0
  24. package/cjs/internal/InternalMenu/InternalMenu.js +24 -8
  25. package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
  26. package/cjs/internal/InternalMenu/InternalMenu.styles.d.ts +5 -4
  27. package/cjs/internal/InternalMenu/InternalMenu.styles.js +14 -18
  28. package/cjs/internal/InternalMenu/InternalMenu.styles.js.map +1 -1
  29. package/cjs/lib/utils.d.ts +1 -1
  30. package/cjs/lib/utils.js +2 -3
  31. package/cjs/lib/utils.js.map +1 -1
  32. package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js +3 -3
  33. package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js.map +1 -1
  34. package/components/CurrencyInput/constants/constants.js +4 -1
  35. package/components/CurrencyInput/constants/constants.js.map +1 -1
  36. package/components/CurrencyInput/constants.d.ts +3 -0
  37. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +5 -2
  38. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  39. package/components/CurrencyLabel/CurrencyLabel.d.ts +3 -1
  40. package/components/CurrencyLabel/CurrencyLabel.md +6 -0
  41. package/components/DropdownMenu/DropdownMenu.md +38 -0
  42. package/components/Input/Input/Input.js +18 -5
  43. package/components/Input/Input/Input.js.map +1 -1
  44. package/components/MenuItem/MenuItem/MenuItem.js +7 -2
  45. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  46. package/components/MenuItem/MenuItem.d.ts +6 -0
  47. package/components/SidePage/SidePage/SidePage.js +10 -6
  48. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  49. package/components/SidePage/SidePage.d.ts +5 -0
  50. package/components/SidePage/SidePageBody/SidePageBody.js +9 -1
  51. package/components/SidePage/SidePageBody/SidePageBody.js.map +1 -1
  52. package/components/SidePage/SidePageBody.d.ts +1 -0
  53. package/internal/InternalMenu/InternalMenu/InternalMenu.js +24 -6
  54. package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
  55. package/internal/InternalMenu/InternalMenu.d.ts +1 -0
  56. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js +13 -10
  57. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js.map +1 -1
  58. package/internal/InternalMenu/InternalMenu.styles.d.ts +5 -4
  59. package/lib/utils/utils.js +0 -1
  60. package/lib/utils/utils.js.map +1 -1
  61. package/lib/utils.d.ts +1 -1
  62. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.6.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.5.3...@skbkontur/react-ui@4.6.0) (2022-10-04)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **DropdownMenu:** apply MenuSeparator instead css ([#2997](https://github.com/skbkontur/retail-ui/issues/2997)) ([a56844f](https://github.com/skbkontur/retail-ui/commit/a56844f2c1b1610f3cc8660ffab8e3a286afe96d))
12
+ * **Input:** repair selectAll if value is less than mask ([#2996](https://github.com/skbkontur/retail-ui/issues/2996)) ([3f28bf1](https://github.com/skbkontur/retail-ui/commit/3f28bf1cc9e8c1a57110c60099762f9338690377))
13
+ * **isNullable:** error in types ([#3005](https://github.com/skbkontur/retail-ui/issues/3005)) ([f6a4411](https://github.com/skbkontur/retail-ui/commit/f6a4411f72aac17a8b887d3ef8287747099f6be8))
14
+
15
+
16
+ ### Features
17
+
18
+ * **CurrencyLabel:** new prop 'hideTrailingZeros' ([#2994](https://github.com/skbkontur/retail-ui/issues/2994)) ([57c3e3a](https://github.com/skbkontur/retail-ui/commit/57c3e3af9c52f7ad896b67e45e6a3391cdefbd5c))
19
+ * **MenuItem:** add rel attribute ([#2998](https://github.com/skbkontur/retail-ui/issues/2998)) ([80f022d](https://github.com/skbkontur/retail-ui/commit/80f022d23c999b9bd3c2e1c3c121890a1d35e067))
20
+ * **SidePage:** add callback for tracking completely opened state ([#3003](https://github.com/skbkontur/retail-ui/issues/3003)) ([dab9738](https://github.com/skbkontur/retail-ui/commit/dab97382c700079513ccd739de2dcf87807cb00a))
21
+ * **SidePage:** update layout on resize SidePageBody ([#3004](https://github.com/skbkontur/retail-ui/issues/3004)) ([09445e2](https://github.com/skbkontur/retail-ui/commit/09445e2a6412b1f20f9e44a7ebd780dde15e740c))
22
+ * **SidePage:** update layout on resize SidePageBody ([#3007](https://github.com/skbkontur/retail-ui/issues/3007)) ([1888bf9](https://github.com/skbkontur/retail-ui/commit/1888bf9f214eb5ce58c2ea72a6f4318e28996b78))
23
+
24
+
25
+
26
+
27
+
6
28
  ## [4.5.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.5.2...@skbkontur/react-ui@4.5.3) (2022-09-12)
7
29
 
8
30
 
@@ -208,4 +208,4 @@ CurrencyHelper = /*#__PURE__*/function () {function CurrencyHelper() {}CurrencyH
208
208
  }
209
209
  var _match$ = match[1],sign = _match$ === void 0 ? '' : _match$,_match$2 = match[2],integer = _match$2 === void 0 ? '' : _match$2,_match$3 = match[3],delimiter = _match$3 === void 0 ? '' : _match$3,_match$4 = match[4],fraction = _match$4 === void 0 ? '' : _match$4;
210
210
  return { sign: sign, integer: integer, delimiter: delimiter, fraction: fraction };
211
- };return CurrencyHelper;}();exports.CurrencyHelper = CurrencyHelper;CurrencyHelper.defaultOptions = { fractionDigits: null, hideTrailingZeros: false, thousandsDelimiter: String.fromCharCode(_client.isSafari ? 0x0020 : 0x2009), minusSign: String.fromCharCode(0x2212) };
211
+ };return CurrencyHelper;}();exports.CurrencyHelper = CurrencyHelper;CurrencyHelper.defaultOptions = { fractionDigits: null, hideTrailingZeros: false, thousandsDelimiter: _client.isSafari ? _constants.SPACE : _constants.THIN_SPACE, minusSign: _constants.MINUS_SIGN };
@@ -1 +1 @@
1
- {"version":3,"sources":["CurrencyHelper.tsx"],"names":["CurrencyHelper","getOptions","options","defaultOptions","getInfo","value","raw","unformatString","formatted","formatString","cursorMap","getCursorMap","formattingOptions","regexp","RegExp","thousandsDelimiter","index","length","cursor","skip","ignoredSymbol","exec","format","toString","parse","cleaned","destructed","destructString","result","sign","integer","delimiter","fraction","parseFloat","replace","formatForClipboard","unformattedValue","fractionDigits","hideTrailingZeros","parts","blockSize","start","i","push","substring","Math","max","join","padEnd","min","MAX_SAFE_DIGITS","minusSign","isValidString","unsigned","integerDigits","extractValid","match","token","substr","MAX_ALLOWED_CHARS","String","fromCharCode","isSafari"],"mappings":"8OAAA;;AAEA;;;;AAIA,wC;;;;;;;;;;;;;;;;;AAiBaA,c;;;;;;;;AAQGC,EAAAA,U,GAAd,oBAAyBC,OAAzB,EAAyG;AACvG,sCAAYF,cAAc,CAACG,cAA3B,EAA8CD,OAA9C;AACD,G;;AAEaE,EAAAA,O,GAAd,iBAAsBC,KAAtB,EAAqCH,OAArC,EAAmG;AACjG,QAAMI,GAAG,GAAGN,cAAc,CAACO,cAAf,CAA8BF,KAA9B,CAAZ;AACA,QAAMG,SAAS,GAAGR,cAAc,CAACS,YAAf,CAA4BJ,KAA5B,EAAmCH,OAAnC,CAAlB;AACA,QAAMQ,SAAS,GAAGV,cAAc,CAACW,YAAf,CAA4BH,SAA5B,EAAuCN,OAAvC,CAAlB;;AAEA,WAAO,EAAEI,GAAG,EAAHA,GAAF,EAAOE,SAAS,EAATA,SAAP,EAAkBE,SAAS,EAATA,SAAlB,EAAP;AACD,G;;AAEaC,EAAAA,Y,GAAd,sBAA2BH,SAA3B,EAA8CI,iBAA9C,EAAiH;AAC/G,QAAMV,OAAO,GAAGF,cAAc,CAACC,UAAf,CAA0BW,iBAA1B,CAAhB;AACA,QAAMC,MAAM,GAAG,IAAIC,MAAJ,CAAWZ,OAAO,CAACa,kBAAnB,CAAf;AACA,QAAML,SAAoB,GAAG,EAA7B;;AAEA,QAAIM,KAAK,GAAGR,SAAS,CAACS,MAAtB;AACA,QAAIC,MAAM,GAAGV,SAAS,CAACS,MAAvB;AACA,QAAIE,IAAI,GAAG,CAAX;;AAEA,WAAOH,KAAK,IAAI,CAAhB,EAAmB;AACjBN,MAAAA,SAAS,CAACM,KAAD,CAAT,GAAmBE,MAAnB;;AAEA,UAAME,aAAa,GAAGP,MAAM,CAACQ,IAAP,CAAYb,SAAS,CAACQ,KAAK,GAAG,CAAT,CAArB,CAAtB;AACA,UAAII,aAAJ,EAAmB;AACjB,UAAED,IAAF;AACD,OAFD,MAEO;AACLD,QAAAA,MAAM,GAAGA,MAAM,GAAGC,IAAT,GAAgB,CAAzB;AACAA,QAAAA,IAAI,GAAG,CAAP;AACD;AACD,QAAEH,KAAF;AACD;AACD,WAAON,SAAP;AACD,G;;AAEaY,EAAAA,M,GAAd,gBAAqBjB,KAArB,EAA8CH,OAA9C,EAAoG;AAClG,QAAI,uBAAWG,KAAX,CAAJ,EAAuB;AACrB,aAAO,EAAP;AACD;;AAED,WAAOL,cAAc,CAACS,YAAf,CAA4BJ,KAAK,CAACkB,QAAN,EAA5B,EAA8CrB,OAA9C,CAAP;AACD,G;;AAEasB,EAAAA,K,GAAd,eAAoBnB,KAApB,EAAqD;AACnD,QAAMoB,OAAO,GAAGzB,cAAc,CAACO,cAAf,CAA8BF,KAA9B,CAAhB;AACA,QAAI,CAACoB,OAAL,EAAc;AACZ,aAAO,IAAP;AACD;;AAED,QAAMC,UAAU,GAAG1B,cAAc,CAAC2B,cAAf,CAA8BF,OAA9B,CAAnB;AACA,QAAI,CAACC,UAAL,EAAiB;AACf,aAAO,IAAP;AACD;;AAED,QAAME,MAAM;AACVF,IAAAA,UAAU,CAACG,IAAX,IAAmBH,UAAU,CAACI,OAAX,IAAsB,GAAzC,KAAiDJ,UAAU,CAACK,SAAX,IAAwB,GAAzE,KAAiFL,UAAU,CAACM,QAAX,IAAuB,GAAxG,CADF;;AAGA,WAAOC,UAAU,CAACL,MAAD,CAAjB;AACD,G;;AAEarB,EAAAA,c,GAAd,wBAA6BF,KAA7B,EAAoD;AAClD,WAAOA,KAAK;AACT6B,IAAAA,OADI,CACI,KADJ,EACW,EADX;AAEJA,IAAAA,OAFI,CAEI,GAFJ,EAES,GAFT;AAGJA,IAAAA,OAHI,CAGI,qDAHJ,EAG2D,GAH3D,CAAP;AAID,G;;AAEaC,EAAAA,kB,GAAd,4BAAiC9B,KAAjC,EAAwD;AACtD,WAAOL,cAAc,CAACO,cAAf,CAA8BF,KAA9B,EAAqC6B,OAArC,CAA6C,GAA7C,EAAkD,GAAlD,CAAP;AACD,G;;AAEazB,EAAAA,Y,GAAd,sBAA2BJ,KAA3B,EAA0CO,iBAA1C,EAA0G;AACxG,QAAMwB,gBAAgB,GAAGpC,cAAc,CAACO,cAAf,CAA8BF,KAA9B,CAAzB;AACA,QAAMqB,UAAU,GAAG1B,cAAc,CAAC2B,cAAf,CAA8BS,gBAA9B,KAAmD;AACpEP,MAAAA,IAAI,EAAE,EAD8D;AAEpEC,MAAAA,OAAO,EAAE,EAF2D;AAGpEC,MAAAA,SAAS,EAAE,EAHyD;AAIpEC,MAAAA,QAAQ,EAAE,EAJ0D,EAAtE;;;AAOA,QAAQH,IAAR,GAAqCH,UAArC,CAAQG,IAAR,CAAcC,OAAd,GAAqCJ,UAArC,CAAcI,OAAd,CAAuBC,SAAvB,GAAqCL,UAArC,CAAuBK,SAAvB;AACA,QAAIC,QAAQ,GAAGN,UAAU,CAACM,QAA1B;AACA,QAAIK,cAAc,GAAGL,QAAQ,CAACf,MAA9B;;AAEA,QAAMf,OAAO,GAAGF,cAAc,CAACC,UAAf,CAA0BW,iBAA1B,CAAhB;AACA,QAAIV,OAAO,CAACoC,iBAAZ,EAA+B;AAC7BN,MAAAA,QAAQ,GAAGA,QAAQ,CAACE,OAAT,CAAiB,KAAjB,EAAwB,EAAxB,CAAX;AACAG,MAAAA,cAAc,GAAGL,QAAQ,CAACf,MAA1B;AACD,KAHD,MAGO,IAAIf,OAAO,CAACmC,cAAR,KAA2B,IAA/B,EAAqC;AAC1CA,MAAAA,cAAc,GAAGnC,OAAO,CAACmC,cAAzB;AACD;;AAED,QAAME,KAAK,GAAG,EAAd;;AAEA,QAAMC,SAAS,GAAG,CAAlB;AACA,QAAMC,KAAK,GAAI,CAACX,OAAO,CAACb,MAAR,GAAiB,CAAlB,IAAuBuB,SAAxB,GAAqCA,SAArC,GAAiD,CAA/D;AACA,SAAK,IAAIE,CAAC,GAAGD,KAAb,EAAoBC,CAAC,GAAGZ,OAAO,CAACb,MAAhC,EAAwCyB,CAAC,IAAIF,SAA7C,EAAwD;AACtDD,MAAAA,KAAK,CAACI,IAAN,CAAWb,OAAO,CAACc,SAAR,CAAkBC,IAAI,CAACC,GAAL,CAASJ,CAAT,EAAY,CAAZ,CAAlB,EAAkCA,CAAC,GAAGF,SAAtC,CAAX;AACD;;AAED,QAAIZ,MAAM,GAAGW,KAAK,CAACQ,IAAN,CAAW7C,OAAO,CAACa,kBAAnB,CAAb;;AAEA,QAAIgB,SAAS,IAAIM,cAAjB,EAAiC;AAC/BT,MAAAA,MAAM,IAAI,GAAV;AACAA,MAAAA,MAAM,IAAII,QAAQ,CAACgB,MAAT,CAAgBH,IAAI,CAACI,GAAL,CAASZ,cAAT,EAAyBa,0BAAzB,CAAhB,EAA2D,GAA3D,CAAV;AACD;;AAED,QAAIrB,IAAJ,EAAU;AACRD,MAAAA,MAAM,GAAG1B,OAAO,CAACiD,SAAR,GAAoBvB,MAA7B;AACD;;AAED,WAAOA,MAAP;AACD,G;;AAEawB,EAAAA,a,GAAd,uBAA4B/C,KAA5B,EAA2CH,OAA3C,EAAoE;AAClE,QAAMkC,gBAAgB,GAAGpC,cAAc,CAACO,cAAf,CAA8BF,KAA9B,CAAzB;AACA,QAAMqB,UAAU,GAAG1B,cAAc,CAAC2B,cAAf,CAA8BS,gBAA9B,CAAnB;;AAEA,QAAI,CAACV,UAAL,EAAiB;AACf,aAAO,KAAP;AACD;;AAED,QAAQG,IAAR,GAA+CH,UAA/C,CAAQG,IAAR,CAAcC,OAAd,GAA+CJ,UAA/C,CAAcI,OAAd,CAAuBC,SAAvB,GAA+CL,UAA/C,CAAuBK,SAAvB,CAAkCC,QAAlC,GAA+CN,UAA/C,CAAkCM,QAAlC;;AAEA,QAAI9B,OAAO,CAACmD,QAAR,IAAoBxB,IAAxB,EAA8B;AAC5B,aAAO,KAAP;AACD;;AAED,QAAI3B,OAAO,CAACmC,cAAR,KAA2B,CAA3B,IAAgCN,SAApC,EAA+C;AAC7C,aAAO,KAAP;AACD;;AAED,QAAMuB,aAAa,GAAGxB,OAAO,KAAK,GAAZ,GAAkB,CAAlB,GAAsBA,OAAO,CAACb,MAApD;AACA,QAAMoB,cAAc,GAAGL,QAAQ,CAACf,MAAhC;;AAEA,QAAI,0BAAcf,OAAO,CAACoD,aAAtB,KAAwCA,aAAa,GAAGpD,OAAO,CAACoD,aAApE,EAAmF;AACjF,aAAO,KAAP;AACD;;AAED,QAAI,uBAAWpD,OAAO,CAACoD,aAAnB,KAAqCA,aAAa,GAAGJ,8BAAmBhD,OAAO,CAACmC,cAAR,IAA0B,CAA7C,CAAzD,EAA0G;AACxG,aAAO,KAAP;AACD;;AAED,QAAI,0BAAcnC,OAAO,CAACmC,cAAtB,KAAyCA,cAAc,GAAGnC,OAAO,CAACmC,cAAtE,EAAsF;AACpF,aAAO,KAAP;AACD;;AAED,WAAOiB,aAAa,GAAGjB,cAAhB,IAAkCa,0BAAzC;AACD,G;;AAEaK,EAAAA,Y,GAAd,sBAA2BlD,KAA3B,EAA0CH,OAA1C,EAA2E;AACzE,QAAMkC,gBAAgB,GAAGpC,cAAc,CAACO,cAAf,CAA8BF,KAA9B,CAAzB;;AAEA,QAAMmD,KAAK,GAAG,UAAUnC,IAAV,CAAee,gBAAf,CAAd;;AAEA,QAAI,CAACoB,KAAL,EAAY;AACV,aAAO,EAAP;AACD;;AAED,QAAMC,KAAK,GAAGD,KAAK,CAAC,CAAD,CAAL,CAASE,MAAT,CAAgB,CAAhB,EAAmBC,4BAAnB,CAAd;;AAEA,SAAK,IAAIjB,CAAC,GAAGe,KAAK,CAACxC,MAAnB,EAA2ByB,CAAC,IAAI,CAAhC,EAAmC,EAAEA,CAArC,EAAwC;AACtC,UAAMd,MAAM,GAAG6B,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgBhB,CAAhB,CAAf;AACA,UAAI1C,cAAc,CAACoD,aAAf,CAA6BxB,MAA7B,EAAqC1B,OAArC,CAAJ,EAAmD;AACjD,eAAO0B,MAAP;AACD;AACF;;AAED,WAAO,EAAP;AACD,G;;AAEaD,EAAAA,c,GAAd,wBAA6BtB,KAA7B,EAA4C;AAC1C,QAAMmD,KAAK,GAAG,0BAA0BnC,IAA1B,CAA+BhB,KAA/B,CAAd;AACA,QAAI,CAACmD,KAAL,EAAY;AACV,aAAO,IAAP;AACD;AACD,kBAAmEA,KAAnE,IAAS3B,IAAT,wBAAgB,EAAhB,sBAAmE2B,KAAnE,IAAoB1B,OAApB,yBAA8B,EAA9B,uBAAmE0B,KAAnE,IAAkCzB,SAAlC,yBAA8C,EAA9C,uBAAmEyB,KAAnE,IAAkDxB,QAAlD,yBAA6D,EAA7D;AACA,WAAO,EAAEH,IAAI,EAAJA,IAAF,EAAQC,OAAO,EAAPA,OAAR,EAAiBC,SAAS,EAATA,SAAjB,EAA4BC,QAAQ,EAARA,QAA5B,EAAP;AACD,G,mEA3LUhC,c,CACGG,c,GAAmD,EAC/DkC,cAAc,EAAE,IAD+C,EAE/DC,iBAAiB,EAAE,KAF4C,EAG/DvB,kBAAkB,EAAE6C,MAAM,CAACC,YAAP,CAAoBC,mBAAW,MAAX,GAAoB,MAAxC,CAH2C,EAI/DX,SAAS,EAAES,MAAM,CAACC,YAAP,CAAoB,MAApB,CAJoD,E","sourcesContent":["import { isNonNullable, isNullable } from '../../lib/utils';\nimport { Nullable } from '../../typings/utility-types';\nimport { isSafari } from '../../lib/client';\n\nimport { DecimalOptions } from './CurrencyInputHelper';\nimport { CursorMap } from './CursorHelper';\nimport { MAX_ALLOWED_CHARS, MAX_SAFE_DIGITS } from './constants';\n\nexport interface DecimalFormattingOptions {\n fractionDigits?: Nullable<number>;\n hideTrailingZeros?: boolean;\n thousandsDelimiter?: string;\n minusSign?: string;\n}\n\ntype DecimalFormattingOptionsInternal = Required<DecimalFormattingOptions>;\n\nexport interface FormattingInfo {\n raw: string;\n formatted: string;\n cursorMap: CursorMap;\n}\n\nexport class CurrencyHelper {\n public static defaultOptions: DecimalFormattingOptionsInternal = {\n fractionDigits: null,\n hideTrailingZeros: false,\n thousandsDelimiter: String.fromCharCode(isSafari ? 0x0020 : 0x2009),\n minusSign: String.fromCharCode(0x2212),\n };\n\n public static getOptions(options?: Nullable<DecimalFormattingOptions>): DecimalFormattingOptionsInternal {\n return { ...CurrencyHelper.defaultOptions, ...options };\n }\n\n public static getInfo(value: string, options?: Nullable<DecimalFormattingOptions>): FormattingInfo {\n const raw = CurrencyHelper.unformatString(value);\n const formatted = CurrencyHelper.formatString(value, options);\n const cursorMap = CurrencyHelper.getCursorMap(formatted, options);\n\n return { raw, formatted, cursorMap };\n }\n\n public static getCursorMap(formatted: string, formattingOptions?: Nullable<DecimalFormattingOptions>): CursorMap {\n const options = CurrencyHelper.getOptions(formattingOptions);\n const regexp = new RegExp(options.thousandsDelimiter);\n const cursorMap: CursorMap = [];\n\n let index = formatted.length;\n let cursor = formatted.length;\n let skip = 0;\n\n while (index >= 0) {\n cursorMap[index] = cursor;\n\n const ignoredSymbol = regexp.exec(formatted[index - 1]);\n if (ignoredSymbol) {\n ++skip;\n } else {\n cursor = cursor - skip - 1;\n skip = 0;\n }\n --index;\n }\n return cursorMap;\n }\n\n public static format(value: Nullable<number>, options?: Nullable<DecimalFormattingOptions>): string {\n if (isNullable(value)) {\n return '';\n }\n\n return CurrencyHelper.formatString(value.toString(), options);\n }\n\n public static parse(value: string): Nullable<number> {\n const cleaned = CurrencyHelper.unformatString(value);\n if (!cleaned) {\n return null;\n }\n\n const destructed = CurrencyHelper.destructString(cleaned);\n if (!destructed) {\n return null;\n }\n\n const result =\n destructed.sign + (destructed.integer || '0') + (destructed.delimiter || '.') + (destructed.fraction || '0');\n\n return parseFloat(result);\n }\n\n public static unformatString(value: string): string {\n return value\n .replace(/\\s/g, '')\n .replace(',', '.')\n .replace(/[\\u2212\\u002D\\uFE63\\uFF0D\\u2012\\u2013\\u2014\\u2015]/g, '-');\n }\n\n public static formatForClipboard(value: string): string {\n return CurrencyHelper.unformatString(value).replace('.', ',');\n }\n\n public static formatString(value: string, formattingOptions?: Nullable<DecimalFormattingOptions>): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue) || {\n sign: '',\n integer: '',\n delimiter: '',\n fraction: '',\n };\n\n const { sign, integer, delimiter } = destructed;\n let fraction = destructed.fraction;\n let fractionDigits = fraction.length;\n\n const options = CurrencyHelper.getOptions(formattingOptions);\n if (options.hideTrailingZeros) {\n fraction = fraction.replace(/0+$/, '');\n fractionDigits = fraction.length;\n } else if (options.fractionDigits !== null) {\n fractionDigits = options.fractionDigits;\n }\n\n const parts = [];\n\n const blockSize = 3;\n const start = ((integer.length - 1) % blockSize) - blockSize + 1;\n for (let i = start; i < integer.length; i += blockSize) {\n parts.push(integer.substring(Math.max(i, 0), i + blockSize));\n }\n\n let result = parts.join(options.thousandsDelimiter);\n\n if (delimiter || fractionDigits) {\n result += ',';\n result += fraction.padEnd(Math.min(fractionDigits, MAX_SAFE_DIGITS), '0');\n }\n\n if (sign) {\n result = options.minusSign + result;\n }\n\n return result;\n }\n\n public static isValidString(value: string, options: DecimalOptions) {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue);\n\n if (!destructed) {\n return false;\n }\n\n const { sign, integer, delimiter, fraction } = destructed;\n\n if (options.unsigned && sign) {\n return false;\n }\n\n if (options.fractionDigits === 0 && delimiter) {\n return false;\n }\n\n const integerDigits = integer === '0' ? 0 : integer.length;\n const fractionDigits = fraction.length;\n\n if (isNonNullable(options.integerDigits) && integerDigits > options.integerDigits) {\n return false;\n }\n\n if (isNullable(options.integerDigits) && integerDigits > MAX_SAFE_DIGITS - (options.fractionDigits || 0)) {\n return false;\n }\n\n if (isNonNullable(options.fractionDigits) && fractionDigits > options.fractionDigits) {\n return false;\n }\n\n return integerDigits + fractionDigits <= MAX_SAFE_DIGITS;\n }\n\n public static extractValid(value: string, options: DecimalOptions): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n\n const match = /[-.\\d]+/.exec(unformattedValue);\n\n if (!match) {\n return '';\n }\n\n const token = match[0].substr(0, MAX_ALLOWED_CHARS);\n\n for (let i = token.length; i >= 0; --i) {\n const result = token.substr(0, i);\n if (CurrencyHelper.isValidString(result, options)) {\n return result;\n }\n }\n\n return '';\n }\n\n public static destructString(value: string) {\n const match = /^(-)?(\\d*)?(\\.)?(\\d*)?$/.exec(value);\n if (!match) {\n return null;\n }\n const [, sign = '', integer = '', delimiter = '', fraction = ''] = match;\n return { sign, integer, delimiter, fraction };\n }\n}\n"]}
1
+ {"version":3,"sources":["CurrencyHelper.tsx"],"names":["CurrencyHelper","getOptions","options","defaultOptions","getInfo","value","raw","unformatString","formatted","formatString","cursorMap","getCursorMap","formattingOptions","regexp","RegExp","thousandsDelimiter","index","length","cursor","skip","ignoredSymbol","exec","format","toString","parse","cleaned","destructed","destructString","result","sign","integer","delimiter","fraction","parseFloat","replace","formatForClipboard","unformattedValue","fractionDigits","hideTrailingZeros","parts","blockSize","start","i","push","substring","Math","max","join","padEnd","min","MAX_SAFE_DIGITS","minusSign","isValidString","unsigned","integerDigits","extractValid","match","token","substr","MAX_ALLOWED_CHARS","isSafari","SPACE","THIN_SPACE","MINUS_SIGN"],"mappings":"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","sourcesContent":["import { isNonNullable, isNullable } from '../../lib/utils';\nimport { Nullable } from '../../typings/utility-types';\nimport { isSafari } from '../../lib/client';\n\nimport { DecimalOptions } from './CurrencyInputHelper';\nimport { CursorMap } from './CursorHelper';\nimport { MAX_ALLOWED_CHARS, MAX_SAFE_DIGITS, MINUS_SIGN, SPACE, THIN_SPACE } from './constants';\n\nexport interface DecimalFormattingOptions {\n fractionDigits?: Nullable<number>;\n hideTrailingZeros?: boolean;\n thousandsDelimiter?: string;\n minusSign?: string;\n}\n\ntype DecimalFormattingOptionsInternal = Required<DecimalFormattingOptions>;\n\nexport interface FormattingInfo {\n raw: string;\n formatted: string;\n cursorMap: CursorMap;\n}\n\nexport class CurrencyHelper {\n public static defaultOptions: DecimalFormattingOptionsInternal = {\n fractionDigits: null,\n hideTrailingZeros: false,\n thousandsDelimiter: isSafari ? SPACE : THIN_SPACE,\n minusSign: MINUS_SIGN,\n };\n\n public static getOptions(options?: Nullable<DecimalFormattingOptions>): DecimalFormattingOptionsInternal {\n return { ...CurrencyHelper.defaultOptions, ...options };\n }\n\n public static getInfo(value: string, options?: Nullable<DecimalFormattingOptions>): FormattingInfo {\n const raw = CurrencyHelper.unformatString(value);\n const formatted = CurrencyHelper.formatString(value, options);\n const cursorMap = CurrencyHelper.getCursorMap(formatted, options);\n\n return { raw, formatted, cursorMap };\n }\n\n public static getCursorMap(formatted: string, formattingOptions?: Nullable<DecimalFormattingOptions>): CursorMap {\n const options = CurrencyHelper.getOptions(formattingOptions);\n const regexp = new RegExp(options.thousandsDelimiter);\n const cursorMap: CursorMap = [];\n\n let index = formatted.length;\n let cursor = formatted.length;\n let skip = 0;\n\n while (index >= 0) {\n cursorMap[index] = cursor;\n\n const ignoredSymbol = regexp.exec(formatted[index - 1]);\n if (ignoredSymbol) {\n ++skip;\n } else {\n cursor = cursor - skip - 1;\n skip = 0;\n }\n --index;\n }\n return cursorMap;\n }\n\n public static format(value: Nullable<number>, options?: Nullable<DecimalFormattingOptions>): string {\n if (isNullable(value)) {\n return '';\n }\n\n return CurrencyHelper.formatString(value.toString(), options);\n }\n\n public static parse(value: string): Nullable<number> {\n const cleaned = CurrencyHelper.unformatString(value);\n if (!cleaned) {\n return null;\n }\n\n const destructed = CurrencyHelper.destructString(cleaned);\n if (!destructed) {\n return null;\n }\n\n const result =\n destructed.sign + (destructed.integer || '0') + (destructed.delimiter || '.') + (destructed.fraction || '0');\n\n return parseFloat(result);\n }\n\n public static unformatString(value: string): string {\n return value\n .replace(/\\s/g, '')\n .replace(',', '.')\n .replace(/[\\u2212\\u002D\\uFE63\\uFF0D\\u2012\\u2013\\u2014\\u2015]/g, '-');\n }\n\n public static formatForClipboard(value: string): string {\n return CurrencyHelper.unformatString(value).replace('.', ',');\n }\n\n public static formatString(value: string, formattingOptions?: Nullable<DecimalFormattingOptions>): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue) || {\n sign: '',\n integer: '',\n delimiter: '',\n fraction: '',\n };\n\n const { sign, integer, delimiter } = destructed;\n let fraction = destructed.fraction;\n let fractionDigits = fraction.length;\n\n const options = CurrencyHelper.getOptions(formattingOptions);\n if (options.hideTrailingZeros) {\n fraction = fraction.replace(/0+$/, '');\n fractionDigits = fraction.length;\n } else if (options.fractionDigits !== null) {\n fractionDigits = options.fractionDigits;\n }\n\n const parts = [];\n\n const blockSize = 3;\n const start = ((integer.length - 1) % blockSize) - blockSize + 1;\n for (let i = start; i < integer.length; i += blockSize) {\n parts.push(integer.substring(Math.max(i, 0), i + blockSize));\n }\n\n let result = parts.join(options.thousandsDelimiter);\n\n if (delimiter || fractionDigits) {\n result += ',';\n result += fraction.padEnd(Math.min(fractionDigits, MAX_SAFE_DIGITS), '0');\n }\n\n if (sign) {\n result = options.minusSign + result;\n }\n\n return result;\n }\n\n public static isValidString(value: string, options: DecimalOptions) {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue);\n\n if (!destructed) {\n return false;\n }\n\n const { sign, integer, delimiter, fraction } = destructed;\n\n if (options.unsigned && sign) {\n return false;\n }\n\n if (options.fractionDigits === 0 && delimiter) {\n return false;\n }\n\n const integerDigits = integer === '0' ? 0 : integer.length;\n const fractionDigits = fraction.length;\n\n if (isNonNullable(options.integerDigits) && integerDigits > options.integerDigits) {\n return false;\n }\n\n if (isNullable(options.integerDigits) && integerDigits > MAX_SAFE_DIGITS - (options.fractionDigits || 0)) {\n return false;\n }\n\n if (isNonNullable(options.fractionDigits) && fractionDigits > options.fractionDigits) {\n return false;\n }\n\n return integerDigits + fractionDigits <= MAX_SAFE_DIGITS;\n }\n\n public static extractValid(value: string, options: DecimalOptions): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n\n const match = /[-.\\d]+/.exec(unformattedValue);\n\n if (!match) {\n return '';\n }\n\n const token = match[0].substr(0, MAX_ALLOWED_CHARS);\n\n for (let i = token.length; i >= 0; --i) {\n const result = token.substr(0, i);\n if (CurrencyHelper.isValidString(result, options)) {\n return result;\n }\n }\n\n return '';\n }\n\n public static destructString(value: string) {\n const match = /^(-)?(\\d*)?(\\.)?(\\d*)?$/.exec(value);\n if (!match) {\n return null;\n }\n const [, sign = '', integer = '', delimiter = '', fraction = ''] = match;\n return { sign, integer, delimiter, fraction };\n }\n}\n"]}
@@ -1,2 +1,5 @@
1
1
  export declare const MAX_SAFE_DIGITS = 15;
2
2
  export declare const MAX_ALLOWED_CHARS: number;
3
+ export declare const THIN_SPACE: string;
4
+ export declare const SPACE: string;
5
+ export declare const MINUS_SIGN: string;
@@ -1,7 +1,11 @@
1
- "use strict";exports.__esModule = true;exports.MAX_SAFE_DIGITS = exports.MAX_ALLOWED_CHARS = void 0; // https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15
1
+ "use strict";exports.__esModule = true;exports.THIN_SPACE = exports.SPACE = exports.MINUS_SIGN = exports.MAX_SAFE_DIGITS = exports.MAX_ALLOWED_CHARS = void 0; // https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15
2
2
  var MAX_SAFE_DIGITS = 15;
3
3
 
4
4
  // + десятичный разделитель
5
5
  // + целая часть равная нулю
6
6
  // + знак '-'
7
- exports.MAX_SAFE_DIGITS = MAX_SAFE_DIGITS;var MAX_ALLOWED_CHARS = MAX_SAFE_DIGITS + 3;exports.MAX_ALLOWED_CHARS = MAX_ALLOWED_CHARS;
7
+ exports.MAX_SAFE_DIGITS = MAX_SAFE_DIGITS;var MAX_ALLOWED_CHARS = MAX_SAFE_DIGITS + 3;exports.MAX_ALLOWED_CHARS = MAX_ALLOWED_CHARS;
8
+
9
+ var THIN_SPACE = String.fromCharCode(0x2009);exports.THIN_SPACE = THIN_SPACE;
10
+ var SPACE = String.fromCharCode(0x0020);exports.SPACE = SPACE;
11
+ var MINUS_SIGN = String.fromCharCode(0x2212);exports.MINUS_SIGN = MINUS_SIGN;
@@ -1 +1 @@
1
- {"version":3,"sources":["constants.ts"],"names":["MAX_SAFE_DIGITS","MAX_ALLOWED_CHARS"],"mappings":"qGAAA;AACO,IAAMA,eAAe,GAAG,EAAxB;;AAEP;AACA;AACA;0CACO,IAAMC,iBAAiB,GAAGD,eAAe,GAAG,CAA5C,C","sourcesContent":["// https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15\nexport const MAX_SAFE_DIGITS = 15;\n\n// + десятичный разделитель\n// + целая часть равная нулю\n// + знак '-'\nexport const MAX_ALLOWED_CHARS = MAX_SAFE_DIGITS + 3;\n"]}
1
+ {"version":3,"sources":["constants.ts"],"names":["MAX_SAFE_DIGITS","MAX_ALLOWED_CHARS","THIN_SPACE","String","fromCharCode","SPACE","MINUS_SIGN"],"mappings":"+JAAA;AACO,IAAMA,eAAe,GAAG,EAAxB;;AAEP;AACA;AACA;0CACO,IAAMC,iBAAiB,GAAGD,eAAe,GAAG,CAA5C,C;;AAEA,IAAME,UAAU,GAAGC,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAnB,C;AACA,IAAMC,KAAK,GAAGF,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAd,C;AACA,IAAME,UAAU,GAAGH,MAAM,CAACC,YAAP,CAAoB,MAApB,CAAnB,C","sourcesContent":["// https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15\nexport const MAX_SAFE_DIGITS = 15;\n\n// + десятичный разделитель\n// + целая часть равная нулю\n// + знак '-'\nexport const MAX_ALLOWED_CHARS = MAX_SAFE_DIGITS + 3;\n\nexport const THIN_SPACE = String.fromCharCode(0x2009);\nexport const SPACE = String.fromCharCode(0x0020);\nexport const MINUS_SIGN = String.fromCharCode(0x2212);\n"]}
@@ -8,12 +8,14 @@ export interface CurrencyLabelProps extends CommonProps {
8
8
  fractionDigits?: number;
9
9
  value: number;
10
10
  currencySymbol?: React.ReactNode;
11
+ /** Убрать лишние нули после запятой */
12
+ hideTrailingZeros?: boolean;
11
13
  }
12
14
  export declare const CurrencyLabelDataTids: {
13
15
  readonly root: "CurrencyLabel__root";
14
16
  };
15
17
  export declare const CurrencyLabel: {
16
- ({ value, fractionDigits, currencySymbol, ...rest }: CurrencyLabelProps): JSX.Element;
18
+ ({ value, fractionDigits, currencySymbol, hideTrailingZeros, ...rest }: CurrencyLabelProps): JSX.Element;
17
19
  __KONTUR_REACT_UI__: string;
18
20
  propTypes: {
19
21
  fractionDigits: ({ fractionDigits, value }: CurrencyLabelProps) => Error | null;
@@ -2,7 +2,9 @@
2
2
 
3
3
  var _constants = require("../CurrencyInput/constants");
4
4
  var _CurrencyHelper = require("../CurrencyInput/CurrencyHelper");
5
- var _CommonWrapper = require("../../internal/CommonWrapper");var _excluded = ["value", "fractionDigits", "currencySymbol"];
5
+ var _CommonWrapper = require("../../internal/CommonWrapper");var _excluded = ["value", "fractionDigits", "currencySymbol", "hideTrailingZeros"];
6
+
7
+
6
8
 
7
9
 
8
10
 
@@ -25,11 +27,12 @@ var CurrencyLabel = function CurrencyLabel(_ref)
25
27
 
26
28
 
27
29
 
28
- {var value = _ref.value,_ref$fractionDigits = _ref.fractionDigits,fractionDigits = _ref$fractionDigits === void 0 ? FRACTION_DIGITS_DEFAULT : _ref$fractionDigits,currencySymbol = _ref.currencySymbol,rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
30
+
31
+ {var value = _ref.value,_ref$fractionDigits = _ref.fractionDigits,fractionDigits = _ref$fractionDigits === void 0 ? FRACTION_DIGITS_DEFAULT : _ref$fractionDigits,currencySymbol = _ref.currencySymbol,_ref$hideTrailingZero = _ref.hideTrailingZeros,hideTrailingZeros = _ref$hideTrailingZero === void 0 ? false : _ref$hideTrailingZero,rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
29
32
  return /*#__PURE__*/(
30
33
  _react.default.createElement(_CommonWrapper.CommonWrapper, rest, /*#__PURE__*/
31
34
  _react.default.createElement("span", { "data-tid": CurrencyLabelDataTids.root },
32
- _CurrencyHelper.CurrencyHelper.format(value, { fractionDigits: fractionDigits }),
35
+ _CurrencyHelper.CurrencyHelper.format(value, { fractionDigits: fractionDigits, hideTrailingZeros: hideTrailingZeros }),
33
36
  currencySymbol && String.fromCharCode(0xa0) /* &nbsp; */,
34
37
  currencySymbol)));
35
38
 
@@ -1 +1 @@
1
- {"version":3,"sources":["CurrencyLabel.tsx"],"names":["FRACTION_DIGITS_DEFAULT","CurrencyLabelDataTids","root","CurrencyLabel","value","fractionDigits","currencySymbol","rest","CurrencyHelper","format","String","fromCharCode","__KONTUR_REACT_UI__","propTypes","MAX_SAFE_DIGITS","Error","destructString","fraction","length","Number","isInteger"],"mappings":"uTAAA;;AAEA;AACA;AACA,6D;;;;;;;;;;;;AAYA,IAAMA,uBAAuB,GAAG,CAAhC;;AAEO,IAAMC,qBAAqB,GAAG;AACnCC,EAAAA,IAAI,EAAE,qBAD6B,EAA9B,C;;;AAIA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB;;;;;AAKU,KAJrCC,KAIqC,QAJrCA,KAIqC,4BAHrCC,cAGqC,CAHrCA,cAGqC,oCAHpBL,uBAGoB,uBAFrCM,cAEqC,QAFrCA,cAEqC,CADlCC,IACkC;AACrC;AACE,iCAAC,4BAAD,EAAmBA,IAAnB;AACE,2CAAM,YAAUN,qBAAqB,CAACC,IAAtC;AACGM,mCAAeC,MAAf,CAAsBL,KAAtB,EAA6B,EAAEC,cAAc,EAAdA,cAAF,EAA7B,CADH;AAEGC,IAAAA,cAAc,IAAII,MAAM,CAACC,YAAP,CAAoB,IAApB,CAFrB,CAE+C,YAF/C;AAGGL,IAAAA,cAHH,CADF,CADF;;;;AASD,CAfM,C;;AAiBPH,aAAa,CAACS,mBAAd,GAAoC,eAApC;;AAEAT,aAAa,CAACU,SAAd,GAA0B;AACxBR,EAAAA,cAAc,EAAE,+BAA6E,kCAA1EA,cAA0E,CAA1EA,eAA0E,qCAAzDL,uBAAyD,wBAAhCI,KAAgC,SAAhCA,KAAgC;AAC3F,QAAIC,eAAc,GAAGS,0BAArB,EAAsC;AACpC,aAAO,IAAIC,KAAJ;AACL,0DAAkDD,0BAAlD,4EADK,CAAP;;;AAID;;AAED,gBAAqBN,+BAAeQ,cAAf,CAA8BN,MAAM,CAACN,KAAD,CAApC,KAAgD,EAAEa,QAAQ,EAAE,EAAZ,EAArE,CAAQA,QAAR,SAAQA,QAAR;AACA,QAAIA,QAAQ,CAACC,MAAT,GAAkBb,eAAtB,EAAsC;AACpC,aAAO,IAAIU,KAAJ;AACL,gIADK,CAAP;;;AAID;;AAED,QAAI,CAACI,MAAM,CAACC,SAAP,CAAiBf,eAAjB,CAAL,EAAuC;AACrC,aAAO,IAAIU,KAAJ,2GAAP;;;AAGD;;AAED,WAAO,IAAP;AACD,GAxBuB,EAA1B","sourcesContent":["import React from 'react';\n\nimport { MAX_SAFE_DIGITS } from '../CurrencyInput/constants';\nimport { CurrencyHelper } from '../CurrencyInput/CurrencyHelper';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\n\nexport interface CurrencyLabelProps extends CommonProps {\n /**\n * Минимальное количество отображаемых знаков после запятой\n * @default 2\n */\n fractionDigits?: number;\n value: number;\n currencySymbol?: React.ReactNode;\n}\n\nconst FRACTION_DIGITS_DEFAULT = 2;\n\nexport const CurrencyLabelDataTids = {\n root: 'CurrencyLabel__root',\n} as const;\n\nexport const CurrencyLabel = ({\n value,\n fractionDigits = FRACTION_DIGITS_DEFAULT,\n currencySymbol,\n ...rest\n}: CurrencyLabelProps): JSX.Element => {\n return (\n <CommonWrapper {...rest}>\n <span data-tid={CurrencyLabelDataTids.root}>\n {CurrencyHelper.format(value, { fractionDigits })}\n {currencySymbol && String.fromCharCode(0xa0) /* &nbsp; */}\n {currencySymbol}\n </span>\n </CommonWrapper>\n );\n};\n\nCurrencyLabel.__KONTUR_REACT_UI__ = 'CurrencyLabel';\n\nCurrencyLabel.propTypes = {\n fractionDigits: ({ fractionDigits = FRACTION_DIGITS_DEFAULT, value }: CurrencyLabelProps) => {\n if (fractionDigits > MAX_SAFE_DIGITS) {\n return new Error(\n `[CurrencyLabel]: Prop 'fractionDigits' exceeds ${MAX_SAFE_DIGITS}.` +\n `\\nSee https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15`,\n );\n }\n\n const { fraction } = CurrencyHelper.destructString(String(value)) || { fraction: '' };\n if (fraction.length > fractionDigits) {\n return new Error(\n `[CurrencyLabel]: Prop 'fractionDigits' less than fractional part of the 'value' property,` +\n `'value' will not be cutted`,\n );\n }\n\n if (!Number.isInteger(fractionDigits)) {\n return new Error(\n `[CurrencyLabel]: Prop 'fractionDigits' is not integer, fraction part of these property will not be used`,\n );\n }\n\n return null;\n },\n};\n"]}
1
+ {"version":3,"sources":["CurrencyLabel.tsx"],"names":["FRACTION_DIGITS_DEFAULT","CurrencyLabelDataTids","root","CurrencyLabel","value","fractionDigits","currencySymbol","hideTrailingZeros","rest","CurrencyHelper","format","String","fromCharCode","__KONTUR_REACT_UI__","propTypes","MAX_SAFE_DIGITS","Error","destructString","fraction","length","Number","isInteger"],"mappings":"uTAAA;;AAEA;AACA;AACA,6D;;;;;;;;;;;;;;AAcA,IAAMA,uBAAuB,GAAG,CAAhC;;AAEO,IAAMC,qBAAqB,GAAG;AACnCC,EAAAA,IAAI,EAAE,qBAD6B,EAA9B,C;;;AAIA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB;;;;;;AAMU,KALrCC,KAKqC,QALrCA,KAKqC,4BAJrCC,cAIqC,CAJrCA,cAIqC,oCAJpBL,uBAIoB,uBAHrCM,cAGqC,QAHrCA,cAGqC,8BAFrCC,iBAEqC,CAFrCA,iBAEqC,sCAFjB,KAEiB,yBADlCC,IACkC;AACrC;AACE,iCAAC,4BAAD,EAAmBA,IAAnB;AACE,2CAAM,YAAUP,qBAAqB,CAACC,IAAtC;AACGO,mCAAeC,MAAf,CAAsBN,KAAtB,EAA6B,EAAEC,cAAc,EAAdA,cAAF,EAAkBE,iBAAiB,EAAjBA,iBAAlB,EAA7B,CADH;AAEGD,IAAAA,cAAc,IAAIK,MAAM,CAACC,YAAP,CAAoB,IAApB,CAFrB,CAE+C,YAF/C;AAGGN,IAAAA,cAHH,CADF,CADF;;;;AASD,CAhBM,C;;AAkBPH,aAAa,CAACU,mBAAd,GAAoC,eAApC;;AAEAV,aAAa,CAACW,SAAd,GAA0B;AACxBT,EAAAA,cAAc,EAAE,+BAA6E,kCAA1EA,cAA0E,CAA1EA,eAA0E,qCAAzDL,uBAAyD,wBAAhCI,KAAgC,SAAhCA,KAAgC;AAC3F,QAAIC,eAAc,GAAGU,0BAArB,EAAsC;AACpC,aAAO,IAAIC,KAAJ;AACL,0DAAkDD,0BAAlD,4EADK,CAAP;;;AAID;;AAED,gBAAqBN,+BAAeQ,cAAf,CAA8BN,MAAM,CAACP,KAAD,CAApC,KAAgD,EAAEc,QAAQ,EAAE,EAAZ,EAArE,CAAQA,QAAR,SAAQA,QAAR;AACA,QAAIA,QAAQ,CAACC,MAAT,GAAkBd,eAAtB,EAAsC;AACpC,aAAO,IAAIW,KAAJ;AACL,gIADK,CAAP;;;AAID;;AAED,QAAI,CAACI,MAAM,CAACC,SAAP,CAAiBhB,eAAjB,CAAL,EAAuC;AACrC,aAAO,IAAIW,KAAJ,2GAAP;;;AAGD;;AAED,WAAO,IAAP;AACD,GAxBuB,EAA1B","sourcesContent":["import React from 'react';\n\nimport { MAX_SAFE_DIGITS } from '../CurrencyInput/constants';\nimport { CurrencyHelper } from '../CurrencyInput/CurrencyHelper';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\n\nexport interface CurrencyLabelProps extends CommonProps {\n /**\n * Минимальное количество отображаемых знаков после запятой\n * @default 2\n */\n fractionDigits?: number;\n value: number;\n currencySymbol?: React.ReactNode;\n /** Убрать лишние нули после запятой */\n hideTrailingZeros?: boolean;\n}\n\nconst FRACTION_DIGITS_DEFAULT = 2;\n\nexport const CurrencyLabelDataTids = {\n root: 'CurrencyLabel__root',\n} as const;\n\nexport const CurrencyLabel = ({\n value,\n fractionDigits = FRACTION_DIGITS_DEFAULT,\n currencySymbol,\n hideTrailingZeros = false,\n ...rest\n}: CurrencyLabelProps): JSX.Element => {\n return (\n <CommonWrapper {...rest}>\n <span data-tid={CurrencyLabelDataTids.root}>\n {CurrencyHelper.format(value, { fractionDigits, hideTrailingZeros })}\n {currencySymbol && String.fromCharCode(0xa0) /* &nbsp; */}\n {currencySymbol}\n </span>\n </CommonWrapper>\n );\n};\n\nCurrencyLabel.__KONTUR_REACT_UI__ = 'CurrencyLabel';\n\nCurrencyLabel.propTypes = {\n fractionDigits: ({ fractionDigits = FRACTION_DIGITS_DEFAULT, value }: CurrencyLabelProps) => {\n if (fractionDigits > MAX_SAFE_DIGITS) {\n return new Error(\n `[CurrencyLabel]: Prop 'fractionDigits' exceeds ${MAX_SAFE_DIGITS}.` +\n `\\nSee https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15`,\n );\n }\n\n const { fraction } = CurrencyHelper.destructString(String(value)) || { fraction: '' };\n if (fraction.length > fractionDigits) {\n return new Error(\n `[CurrencyLabel]: Prop 'fractionDigits' less than fractional part of the 'value' property,` +\n `'value' will not be cutted`,\n );\n }\n\n if (!Number.isInteger(fractionDigits)) {\n return new Error(\n `[CurrencyLabel]: Prop 'fractionDigits' is not integer, fraction part of these property will not be used`,\n );\n }\n\n return null;\n },\n};\n"]}
@@ -21,3 +21,9 @@ Count of fraction digits can be changed
21
21
  ```jsx
22
22
  <CurrencyLabel value={3562001.1} fractionDigits={3} currencySymbol={'₽'} />
23
23
  ```
24
+
25
+ Can hide trailing zeros
26
+
27
+ ```jsx
28
+ <CurrencyLabel value={356.167} fractionDigits={5} hideTrailingZeros />
29
+ ```
@@ -123,6 +123,44 @@ import { MenuItem } from '@skbkontur/react-ui';
123
123
  </DropdownMenu>;
124
124
  ```
125
125
 
126
+ Пример с чекбоксом внутри MenuItem.
127
+
128
+ ```jsx harmony
129
+ import { MenuItem, Checkbox, Button } from '@skbkontur/react-ui';
130
+
131
+ const [checked, setChecked] = React.useState(false);
132
+
133
+ let close;
134
+
135
+ const renderCaption = ({ openMenu, closeMenu }) => {
136
+ close = closeMenu;
137
+ return (
138
+ <Button onClick={openMenu} use="primary">
139
+ Открыть меню
140
+ </Button>
141
+ );
142
+ };
143
+
144
+ <DropdownMenu caption={renderCaption}>
145
+ <MenuItem onClick={(e) => e.preventDefault()}>Просто пункт</MenuItem>
146
+ <MenuItem
147
+ onClick={(e) => {
148
+ e.preventDefault();
149
+ setChecked(!checked);
150
+ }}
151
+ >
152
+ <Checkbox checked={checked}>с чекбоксом</Checkbox>
153
+ </MenuItem>
154
+ <MenuItem
155
+ onClick={(e) => {
156
+ e.preventDefault();
157
+ close();
158
+ }}
159
+ >
160
+ Закрыть
161
+ </MenuItem>
162
+ </DropdownMenu>
163
+ ```
126
164
 
127
165
  Условный рендер элементов меню (с сохранением поведения [`MenuItem`](#/Components/MenuItem)).
128
166
 
@@ -225,6 +225,11 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
225
225
 
226
226
 
227
227
 
228
+
229
+
230
+
231
+
232
+
228
233
 
229
234
 
230
235
 
@@ -582,6 +587,6 @@ Input = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
582
587
  * @public
583
588
  * @param {number} start
584
589
  * @param {number} end
585
- */;_proto.setSelectionRange = function setSelectionRange(start, end) {if (!this.input) {throw new Error('Cannot call "setSelectionRange" on unmounted Input');}if (document.activeElement !== this.input) {this.focus();}this.input.setSelectionRange(start, end);};_proto.render = function render() {var _this3 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this3.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this3.setRootNode }, _this3.props), _this3.renderMain);});} /**
590
+ */;_proto.setSelectionRange = function setSelectionRange(start, end) {var _this$props$value,_this3 = this;if (!this.input) {throw new Error('Cannot call "setSelectionRange" on unmounted Input');}if (document.activeElement !== this.input) {this.focus();}if (this.props.mask && this.props.value && ((_this$props$value = this.props.value) == null ? void 0 : _this$props$value.length) < this.props.mask.length) {setTimeout(function () {var _this3$input;(_this3$input = _this3.input) == null ? void 0 : _this3$input.setSelectionRange(start, end);}, 150);} else {var _this$input;(_this$input = this.input) == null ? void 0 : _this$input.setSelectionRange(start, end);}};_proto.render = function render() {var _this4 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this4.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this4.setRootNode }, _this4.props), _this4.renderMain);});} /**
586
591
  * @public
587
592
  */;_proto.renderMaskedInput = function renderMaskedInput(inputProps, mask) {return /*#__PURE__*/_react.default.createElement(_MaskedInput.MaskedInput, (0, _extends2.default)({}, inputProps, { mask: mask, maskChar: this.props.maskChar, alwaysShowMask: this.props.alwaysShowMask, formatChars: this.props.formatChars, onChange: this.props.onChange, onValueChange: this.handleMaskedValueChange, onUnexpectedInput: this.handleUnexpectedInput }));};_proto.getIconSizeClassname = function getIconSizeClassname(right) {if (right === void 0) {right = false;}switch (this.getProps().size) {case 'large':return right ? _Input.styles.rightIconLarge(this.theme) : _Input.styles.leftIconLarge(this.theme);case 'medium':return right ? _Input.styles.rightIconMedium(this.theme) : _Input.styles.leftIconMedium(this.theme);case 'small':default:return right ? _Input.styles.rightIconSmall(this.theme) : _Input.styles.leftIconSmall(this.theme);}};_proto.renderLeftIcon = function renderLeftIcon() {return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());};_proto.renderRightIcon = function renderRightIcon() {return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));};_proto.renderIcon = function renderIcon(icon, sizeClassName) {var _cx5;if (!icon) {return null;}var disabled = this.props.disabled;var iconNode = icon instanceof Function ? icon() : icon;return /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_Input.styles.icon(), sizeClassName, _Input.styles.useDefaultColor(this.theme), (_cx5 = {}, _cx5[_Input.styles.iconFocus(this.theme)] = this.state.focused, _cx5[_Input.styles.iconDisabled()] = disabled, _cx5)) }, iconNode);};_proto.renderPlaceholder = function renderPlaceholder() {var disabled = this.props.disabled;var focused = this.state.focused;var placeholder = null;if (this.state.needsPolyfillPlaceholder && this.props.placeholder && !this.isMaskVisible && !this.props.value && !this.props.defaultValue) {var _cx6;placeholder = /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)(_Input.styles.placeholder(this.theme), (_cx6 = {}, _cx6[_Input.styles.placeholderDisabled(this.theme)] = disabled, _cx6[_Input.styles.placeholderFocus(this.theme)] = focused, _cx6)), style: { textAlign: this.props.align || 'inherit' } }, this.props.placeholder);}return placeholder;};_proto.getSizeClassName = function getSizeClassName() {var _cx7, _cx8, _cx9;switch (this.getProps().size) {case 'large':return (0, _Emotion.cx)((_cx7 = {}, _cx7[_Input.styles.sizeLarge(this.theme)] = true, _cx7[_Input.styles.sizeLargeFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx7));case 'medium':return (0, _Emotion.cx)((_cx8 = {}, _cx8[_Input.styles.sizeMedium(this.theme)] = true, _cx8[_Input.styles.sizeMediumFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx8));case 'small':default:return (0, _Emotion.cx)((_cx9 = {}, _cx9[_Input.styles.sizeSmall(this.theme)] = true, _cx9[_Input.styles.sizeSmallFallback(this.theme)] = _client.isIE11 || _client.isEdge, _cx9));}};(0, _createClass2.default)(Input, [{ key: "isMaskVisible", get: function get() {var _this$props3 = this.props,mask = _this$props3.mask,alwaysShowMask = _this$props3.alwaysShowMask;var focused = this.state.focused;return Boolean(mask && (focused || alwaysShowMask));} }]);return Input;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Input', _class2.defaultProps = { size: 'small' }, _temp)) || _class;exports.Input = Input;
@@ -1 +1 @@
1
- {"version":3,"sources":["Input.tsx"],"names":["InputDataTids","root","Input","rootNode","getProps","defaultProps","state","needsPolyfillPlaceholder","blinking","focused","selectAllId","blinkTimeout","input","selectAll","setSelectionRange","value","length","delaySelectAll","cancelDelayedSelectAll","raf","cancel","cancelBlink","callback","clearTimeout","setState","renderMain","props","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","warning","leftIcon","rightIcon","borderless","align","type","mask","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","rest","labelProps","className","styles","theme","getSizeClassName","focus","blink","focusFallback","isIE11","isEdge","warningFallback","errorFallback","style","inputProps","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","renderMaskedInput","React","createElement","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","element","MaskedInput","event","fieldIsEmpty","target","e","isDeleteKey","isKeyBackspace","isKeyDelete","currentTarget","repeat","handleUnexpectedInput","maxLength","handleMaskedValueChange","prefixDisabled","suffixDisabled","componentWillUnmount","blur","getNode","offsetWidth","window","setTimeout","start","end","Error","document","activeElement","render","setRootNode","getIconSizeClassname","right","rightIconLarge","leftIconLarge","rightIconMedium","leftIconMedium","rightIconSmall","leftIconSmall","renderIcon","icon","sizeClassName","iconNode","Function","useDefaultColor","iconFocus","iconDisabled","defaultValue","placeholderDisabled","placeholderFocus","sizeLarge","sizeLargeFallback","sizeMedium","sizeMediumFallback","sizeSmall","sizeSmallFallback","Boolean","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React from 'react';\nimport raf from 'raf';\n\nimport { isIE11, isEdge } from '../../lib/client';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { MaskedInput } from '../../internal/MaskedInput';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Input.styles';\n\nexport type InputSize = 'small' | 'medium' | 'large';\nexport type InputAlign = 'left' | 'center' | 'right';\nexport type InputType = 'password' | 'text';\nexport type InputIconType = React.ReactNode | (() => React.ReactNode);\n\nexport interface InputProps\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Иконка слева\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n leftIcon?: InputIconType;\n /**\n * Иконка справа\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n rightIcon?: InputIconType;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Режим прозрачной рамки */\n borderless?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n /** Паттерн маски */\n mask?: Nullable<string>;\n /** Символ маски */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для задания маски\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /** Показывать символы маски */\n alwaysShowMask?: boolean;\n /** Размер */\n size?: InputSize;\n /** onValueChange */\n onValueChange?: (value: string) => void;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /** Тип */\n type?: InputType;\n /** Значение */\n value?: string;\n capture?: boolean;\n\n /**\n * Префикс\n * `ReactNode` перед значением, но после иконки\n */\n prefix?: React.ReactNode;\n /**\n * Суффикс\n * `ReactNode` после значения, но перед правой иконкой\n */\n suffix?: React.ReactNode;\n /** Выделять введенное значение при фокусе */\n selectAllOnFocus?: boolean;\n /**\n * Обработчик неправильного ввода.\n * По-умолчанию, инпут вспыхивает синим.\n * Если передан - вызывается переданный обработчик,\n * в таком случае вспыхивание можно вызвать\n * публичным методом инстанса `blink()`.\n *\n * @param value значение инпута.\n */\n onUnexpectedInput?: (value: string) => void;\n }\n > {}\n\nexport interface InputState {\n blinking: boolean;\n focused: boolean;\n needsPolyfillPlaceholder: boolean;\n}\n\nexport const InputDataTids = {\n root: 'Input__root',\n} as const;\n\ntype DefaultProps = Required<Pick<InputProps, 'size'>>;\n\n/**\n * Интерфейс пропсов наследуется от `React.InputHTMLAttributes<HTMLInputElement>`.\n * Все пропсы кроме перечисленных, `className` и `style` передаются в `<input>`\n */\n@rootNode\nexport class Input extends React.Component<InputProps, InputState> {\n public static __KONTUR_REACT_UI__ = 'Input';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n };\n\n private getProps = createPropsGetter(Input.defaultProps);\n\n public state: InputState = {\n needsPolyfillPlaceholder,\n blinking: false,\n focused: false,\n };\n\n private selectAllId: number | null = null;\n private theme!: Theme;\n private blinkTimeout = 0;\n private input: HTMLInputElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n if (this.blinkTimeout) {\n clearTimeout(this.blinkTimeout);\n }\n this.cancelDelayedSelectAll();\n }\n\n /**\n * @public\n */\n public focus() {\n invariant(this.input, 'Cannot call \"focus\" because Input is not mounted');\n this.input.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n invariant(this.input, 'Cannot call \"blur\" because Input is not mounted');\n this.input.blur();\n }\n\n /**\n * @public\n */\n public getNode() {\n return this.input;\n }\n\n /**\n * @public\n */\n public blink() {\n if (this.blinkTimeout) {\n this.cancelBlink(() => {\n // trigger reflow to restart animation\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n void (this.input && this.input.offsetWidth);\n this.blink();\n });\n return;\n }\n this.setState({ blinking: true }, () => {\n this.blinkTimeout = window.setTimeout(this.cancelBlink, 150);\n });\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange(start: number, end: number) {\n if (!this.input) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (document.activeElement !== this.input) {\n this.focus();\n }\n\n this.input.setSelectionRange(start, end);\n }\n\n public get isMaskVisible(): boolean {\n const { mask, alwaysShowMask } = this.props;\n const { focused } = this.state;\n return Boolean(mask && (focused || alwaysShowMask));\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public selectAll = (): void => {\n if (this.input) {\n this.setSelectionRange(0, this.input.value.length);\n }\n };\n\n private delaySelectAll = (): number => (this.selectAllId = raf(this.selectAll));\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n raf.cancel(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private cancelBlink = (callback?: () => void): void => {\n if (this.blinkTimeout) {\n clearTimeout(this.blinkTimeout);\n this.blinkTimeout = 0;\n if (this.state.blinking) {\n this.setState({ blinking: false }, callback);\n return;\n }\n }\n if (callback) {\n callback();\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<InputProps>) => {\n const {\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onKeyPress,\n onValueChange,\n width,\n error,\n warning,\n leftIcon,\n rightIcon,\n borderless,\n value,\n align,\n type,\n mask,\n maskChar,\n alwaysShowMask,\n size,\n placeholder,\n selectAllOnFocus,\n disabled,\n onUnexpectedInput,\n prefix,\n suffix,\n formatChars,\n ...rest\n } = props;\n\n const { blinking, focused } = this.state;\n\n const labelProps = {\n className: cx(styles.root(this.theme), this.getSizeClassName(), {\n [styles.focus(this.theme)]: focused,\n [styles.blink(this.theme)]: blinking,\n [styles.borderless()]: borderless && !focused,\n [styles.disabled(this.theme)]: disabled,\n [styles.warning(this.theme)]: warning,\n [styles.error(this.theme)]: error,\n [styles.focusFallback(this.theme)]: focused && (isIE11 || isEdge),\n [styles.warningFallback(this.theme)]: warning && (isIE11 || isEdge),\n [styles.errorFallback(this.theme)]: error && (isIE11 || isEdge),\n }),\n style: { width },\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n };\n\n const inputProps = {\n ...rest,\n className: cx(styles.input(this.theme), {\n [styles.inputFocus(this.theme)]: focused,\n [styles.inputDisabled(this.theme)]: disabled,\n }),\n value,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleBlur,\n style: { textAlign: align },\n ref: this.refInput,\n type: 'text',\n placeholder: !this.isMaskVisible && !needsPolyfillPlaceholder ? placeholder : undefined,\n disabled,\n };\n\n if (type === 'password') {\n inputProps.type = type;\n }\n\n const input = mask ? this.renderMaskedInput(inputProps, mask) : React.createElement('input', inputProps);\n\n return (\n <label data-tid={InputDataTids.root} {...labelProps}>\n <span className={styles.sideContainer()}>\n {this.renderLeftIcon()}\n {this.renderPrefix()}\n </span>\n <span className={styles.wrapper()}>\n {input}\n {this.renderPlaceholder()}\n </span>\n <span className={cx(styles.sideContainer(), styles.rightContainer())}>\n {this.renderSuffix()}\n {this.renderRightIcon()}\n </span>\n </label>\n );\n };\n\n private renderMaskedInput(\n inputProps: React.InputHTMLAttributes<HTMLInputElement> & {\n capture?: boolean;\n },\n mask: string,\n ) {\n return (\n <MaskedInput\n {...inputProps}\n mask={mask}\n maskChar={this.props.maskChar}\n alwaysShowMask={this.props.alwaysShowMask}\n formatChars={this.props.formatChars}\n onChange={this.props.onChange}\n onValueChange={this.handleMaskedValueChange}\n onUnexpectedInput={this.handleUnexpectedInput}\n />\n );\n }\n\n private getIconSizeClassname(right = false) {\n switch (this.getProps().size) {\n case 'large':\n return right ? styles.rightIconLarge(this.theme) : styles.leftIconLarge(this.theme);\n case 'medium':\n return right ? styles.rightIconMedium(this.theme) : styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return right ? styles.rightIconSmall(this.theme) : styles.leftIconSmall(this.theme);\n }\n }\n\n private renderLeftIcon() {\n return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());\n }\n\n private renderRightIcon() {\n return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));\n }\n\n private renderIcon(icon: InputIconType, sizeClassName: string) {\n if (!icon) {\n return null;\n }\n const { disabled } = this.props;\n const iconNode = icon instanceof Function ? icon() : icon;\n\n return (\n <span\n className={cx(styles.icon(), sizeClassName, styles.useDefaultColor(this.theme), {\n [styles.iconFocus(this.theme)]: this.state.focused,\n [styles.iconDisabled()]: disabled,\n })}\n >\n {iconNode}\n </span>\n );\n }\n\n private renderPlaceholder() {\n const { disabled } = this.props;\n const { focused } = this.state;\n let placeholder = null;\n\n if (\n this.state.needsPolyfillPlaceholder &&\n this.props.placeholder &&\n !this.isMaskVisible &&\n !this.props.value &&\n !this.props.defaultValue\n ) {\n placeholder = (\n <div\n className={cx(styles.placeholder(this.theme), {\n [styles.placeholderDisabled(this.theme)]: disabled,\n [styles.placeholderFocus(this.theme)]: focused,\n })}\n style={{ textAlign: this.props.align || 'inherit' }}\n >\n {this.props.placeholder}\n </div>\n );\n }\n\n return placeholder;\n }\n\n private getSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return cx({\n [styles.sizeLarge(this.theme)]: true,\n [styles.sizeLargeFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'medium':\n return cx({\n [styles.sizeMedium(this.theme)]: true,\n [styles.sizeMediumFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'small':\n default:\n return cx({\n [styles.sizeSmall(this.theme)]: true,\n [styles.sizeSmallFallback(this.theme)]: isIE11 || isEdge,\n });\n }\n }\n\n private refInput = (element: HTMLInputElement | MaskedInput | null) => {\n if (element instanceof MaskedInput) {\n this.input = element.input;\n } else {\n this.input = element;\n }\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = event.target.value === '';\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n focused: true,\n });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.input && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n this.handleUnexpectedInput();\n }\n };\n\n private handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n\n if (this.props.maxLength === event.currentTarget.value.length) {\n this.handleUnexpectedInput(event.currentTarget.value);\n }\n };\n\n private handleMaskedValueChange = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private handleUnexpectedInput = (value: string = this.props.value || '') => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(value);\n } else {\n this.blink();\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private renderPrefix = () => {\n const { prefix, disabled } = this.props;\n\n if (!prefix) {\n return null;\n }\n\n return (\n <span className={cx(styles.prefix(this.theme), { [styles.prefixDisabled(this.theme)]: disabled })}>{prefix}</span>\n );\n };\n\n private renderSuffix = () => {\n const { suffix, disabled } = this.props;\n\n if (!suffix) {\n return null;\n }\n\n return (\n <span className={cx(styles.suffix(this.theme), { [styles.suffixDisabled(this.theme)]: disabled })}>{suffix}</span>\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["Input.tsx"],"names":["InputDataTids","root","Input","rootNode","getProps","defaultProps","state","needsPolyfillPlaceholder","blinking","focused","selectAllId","blinkTimeout","input","selectAll","setSelectionRange","value","length","delaySelectAll","cancelDelayedSelectAll","raf","cancel","cancelBlink","callback","clearTimeout","setState","renderMain","props","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","warning","leftIcon","rightIcon","borderless","align","type","mask","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","rest","labelProps","className","styles","theme","getSizeClassName","focus","blink","focusFallback","isIE11","isEdge","warningFallback","errorFallback","style","inputProps","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","renderMaskedInput","React","createElement","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","element","MaskedInput","event","fieldIsEmpty","target","e","isDeleteKey","isKeyBackspace","isKeyDelete","currentTarget","repeat","handleUnexpectedInput","maxLength","handleMaskedValueChange","prefixDisabled","suffixDisabled","componentWillUnmount","blur","getNode","offsetWidth","window","setTimeout","start","end","Error","document","activeElement","render","setRootNode","getIconSizeClassname","right","rightIconLarge","leftIconLarge","rightIconMedium","leftIconMedium","rightIconSmall","leftIconSmall","renderIcon","icon","sizeClassName","iconNode","Function","useDefaultColor","iconFocus","iconDisabled","defaultValue","placeholderDisabled","placeholderFocus","sizeLarge","sizeLargeFallback","sizeMedium","sizeMediumFallback","sizeSmall","sizeSmallFallback","Boolean","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React from 'react';\nimport raf from 'raf';\n\nimport { isIE11, isEdge } from '../../lib/client';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { MaskedInput } from '../../internal/MaskedInput';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './Input.styles';\n\nexport type InputSize = 'small' | 'medium' | 'large';\nexport type InputAlign = 'left' | 'center' | 'right';\nexport type InputType = 'password' | 'text';\nexport type InputIconType = React.ReactNode | (() => React.ReactNode);\n\nexport interface InputProps\n extends CommonProps,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Иконка слева\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n leftIcon?: InputIconType;\n /**\n * Иконка справа\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n rightIcon?: InputIconType;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Режим прозрачной рамки */\n borderless?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n /** Паттерн маски */\n mask?: Nullable<string>;\n /** Символ маски */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для задания маски\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /** Показывать символы маски */\n alwaysShowMask?: boolean;\n /** Размер */\n size?: InputSize;\n /** onValueChange */\n onValueChange?: (value: string) => void;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /** Тип */\n type?: InputType;\n /** Значение */\n value?: string;\n capture?: boolean;\n\n /**\n * Префикс\n * `ReactNode` перед значением, но после иконки\n */\n prefix?: React.ReactNode;\n /**\n * Суффикс\n * `ReactNode` после значения, но перед правой иконкой\n */\n suffix?: React.ReactNode;\n /** Выделять введенное значение при фокусе */\n selectAllOnFocus?: boolean;\n /**\n * Обработчик неправильного ввода.\n * По-умолчанию, инпут вспыхивает синим.\n * Если передан - вызывается переданный обработчик,\n * в таком случае вспыхивание можно вызвать\n * публичным методом инстанса `blink()`.\n *\n * @param value значение инпута.\n */\n onUnexpectedInput?: (value: string) => void;\n }\n > {}\n\nexport interface InputState {\n blinking: boolean;\n focused: boolean;\n needsPolyfillPlaceholder: boolean;\n}\n\nexport const InputDataTids = {\n root: 'Input__root',\n} as const;\n\ntype DefaultProps = Required<Pick<InputProps, 'size'>>;\n\n/**\n * Интерфейс пропсов наследуется от `React.InputHTMLAttributes<HTMLInputElement>`.\n * Все пропсы кроме перечисленных, `className` и `style` передаются в `<input>`\n */\n@rootNode\nexport class Input extends React.Component<InputProps, InputState> {\n public static __KONTUR_REACT_UI__ = 'Input';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n };\n\n private getProps = createPropsGetter(Input.defaultProps);\n\n public state: InputState = {\n needsPolyfillPlaceholder,\n blinking: false,\n focused: false,\n };\n\n private selectAllId: number | null = null;\n private theme!: Theme;\n private blinkTimeout = 0;\n private input: HTMLInputElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n if (this.blinkTimeout) {\n clearTimeout(this.blinkTimeout);\n }\n this.cancelDelayedSelectAll();\n }\n\n /**\n * @public\n */\n public focus() {\n invariant(this.input, 'Cannot call \"focus\" because Input is not mounted');\n this.input.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n invariant(this.input, 'Cannot call \"blur\" because Input is not mounted');\n this.input.blur();\n }\n\n /**\n * @public\n */\n public getNode() {\n return this.input;\n }\n\n /**\n * @public\n */\n public blink() {\n if (this.blinkTimeout) {\n this.cancelBlink(() => {\n // trigger reflow to restart animation\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n void (this.input && this.input.offsetWidth);\n this.blink();\n });\n return;\n }\n this.setState({ blinking: true }, () => {\n this.blinkTimeout = window.setTimeout(this.cancelBlink, 150);\n });\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange(start: number, end: number) {\n if (!this.input) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (document.activeElement !== this.input) {\n this.focus();\n }\n if (this.props.mask && this.props.value && this.props.value?.length < this.props.mask.length) {\n setTimeout(() => {\n this.input?.setSelectionRange(start, end);\n }, 150);\n } else {\n this.input?.setSelectionRange(start, end);\n }\n }\n\n public get isMaskVisible(): boolean {\n const { mask, alwaysShowMask } = this.props;\n const { focused } = this.state;\n return Boolean(mask && (focused || alwaysShowMask));\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public selectAll = (): void => {\n if (this.input) {\n this.setSelectionRange(0, this.input.value.length);\n }\n };\n\n private delaySelectAll = (): number => (this.selectAllId = raf(this.selectAll));\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n raf.cancel(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private cancelBlink = (callback?: () => void): void => {\n if (this.blinkTimeout) {\n clearTimeout(this.blinkTimeout);\n this.blinkTimeout = 0;\n if (this.state.blinking) {\n this.setState({ blinking: false }, callback);\n return;\n }\n }\n if (callback) {\n callback();\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<InputProps>) => {\n const {\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onKeyPress,\n onValueChange,\n width,\n error,\n warning,\n leftIcon,\n rightIcon,\n borderless,\n value,\n align,\n type,\n mask,\n maskChar,\n alwaysShowMask,\n size,\n placeholder,\n selectAllOnFocus,\n disabled,\n onUnexpectedInput,\n prefix,\n suffix,\n formatChars,\n ...rest\n } = props;\n\n const { blinking, focused } = this.state;\n\n const labelProps = {\n className: cx(styles.root(this.theme), this.getSizeClassName(), {\n [styles.focus(this.theme)]: focused,\n [styles.blink(this.theme)]: blinking,\n [styles.borderless()]: borderless && !focused,\n [styles.disabled(this.theme)]: disabled,\n [styles.warning(this.theme)]: warning,\n [styles.error(this.theme)]: error,\n [styles.focusFallback(this.theme)]: focused && (isIE11 || isEdge),\n [styles.warningFallback(this.theme)]: warning && (isIE11 || isEdge),\n [styles.errorFallback(this.theme)]: error && (isIE11 || isEdge),\n }),\n style: { width },\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n };\n\n const inputProps = {\n ...rest,\n className: cx(styles.input(this.theme), {\n [styles.inputFocus(this.theme)]: focused,\n [styles.inputDisabled(this.theme)]: disabled,\n }),\n value,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleBlur,\n style: { textAlign: align },\n ref: this.refInput,\n type: 'text',\n placeholder: !this.isMaskVisible && !needsPolyfillPlaceholder ? placeholder : undefined,\n disabled,\n };\n\n if (type === 'password') {\n inputProps.type = type;\n }\n\n const input = mask ? this.renderMaskedInput(inputProps, mask) : React.createElement('input', inputProps);\n\n return (\n <label data-tid={InputDataTids.root} {...labelProps}>\n <span className={styles.sideContainer()}>\n {this.renderLeftIcon()}\n {this.renderPrefix()}\n </span>\n <span className={styles.wrapper()}>\n {input}\n {this.renderPlaceholder()}\n </span>\n <span className={cx(styles.sideContainer(), styles.rightContainer())}>\n {this.renderSuffix()}\n {this.renderRightIcon()}\n </span>\n </label>\n );\n };\n\n private renderMaskedInput(\n inputProps: React.InputHTMLAttributes<HTMLInputElement> & {\n capture?: boolean;\n },\n mask: string,\n ) {\n return (\n <MaskedInput\n {...inputProps}\n mask={mask}\n maskChar={this.props.maskChar}\n alwaysShowMask={this.props.alwaysShowMask}\n formatChars={this.props.formatChars}\n onChange={this.props.onChange}\n onValueChange={this.handleMaskedValueChange}\n onUnexpectedInput={this.handleUnexpectedInput}\n />\n );\n }\n\n private getIconSizeClassname(right = false) {\n switch (this.getProps().size) {\n case 'large':\n return right ? styles.rightIconLarge(this.theme) : styles.leftIconLarge(this.theme);\n case 'medium':\n return right ? styles.rightIconMedium(this.theme) : styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return right ? styles.rightIconSmall(this.theme) : styles.leftIconSmall(this.theme);\n }\n }\n\n private renderLeftIcon() {\n return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());\n }\n\n private renderRightIcon() {\n return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));\n }\n\n private renderIcon(icon: InputIconType, sizeClassName: string) {\n if (!icon) {\n return null;\n }\n const { disabled } = this.props;\n const iconNode = icon instanceof Function ? icon() : icon;\n\n return (\n <span\n className={cx(styles.icon(), sizeClassName, styles.useDefaultColor(this.theme), {\n [styles.iconFocus(this.theme)]: this.state.focused,\n [styles.iconDisabled()]: disabled,\n })}\n >\n {iconNode}\n </span>\n );\n }\n\n private renderPlaceholder() {\n const { disabled } = this.props;\n const { focused } = this.state;\n let placeholder = null;\n\n if (\n this.state.needsPolyfillPlaceholder &&\n this.props.placeholder &&\n !this.isMaskVisible &&\n !this.props.value &&\n !this.props.defaultValue\n ) {\n placeholder = (\n <div\n className={cx(styles.placeholder(this.theme), {\n [styles.placeholderDisabled(this.theme)]: disabled,\n [styles.placeholderFocus(this.theme)]: focused,\n })}\n style={{ textAlign: this.props.align || 'inherit' }}\n >\n {this.props.placeholder}\n </div>\n );\n }\n\n return placeholder;\n }\n\n private getSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return cx({\n [styles.sizeLarge(this.theme)]: true,\n [styles.sizeLargeFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'medium':\n return cx({\n [styles.sizeMedium(this.theme)]: true,\n [styles.sizeMediumFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'small':\n default:\n return cx({\n [styles.sizeSmall(this.theme)]: true,\n [styles.sizeSmallFallback(this.theme)]: isIE11 || isEdge,\n });\n }\n }\n\n private refInput = (element: HTMLInputElement | MaskedInput | null) => {\n if (element instanceof MaskedInput) {\n this.input = element.input;\n } else {\n this.input = element;\n }\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = event.target.value === '';\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n focused: true,\n });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.input && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n this.handleUnexpectedInput();\n }\n };\n\n private handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n\n if (this.props.maxLength === event.currentTarget.value.length) {\n this.handleUnexpectedInput(event.currentTarget.value);\n }\n };\n\n private handleMaskedValueChange = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private handleUnexpectedInput = (value: string = this.props.value || '') => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(value);\n } else {\n this.blink();\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private renderPrefix = () => {\n const { prefix, disabled } = this.props;\n\n if (!prefix) {\n return null;\n }\n\n return (\n <span className={cx(styles.prefix(this.theme), { [styles.prefixDisabled(this.theme)]: disabled })}>{prefix}</span>\n );\n };\n\n private renderSuffix = () => {\n const { suffix, disabled } = this.props;\n\n if (!suffix) {\n return null;\n }\n\n return (\n <span className={cx(styles.suffix(this.theme), { [styles.suffixDisabled(this.theme)]: disabled })}>{suffix}</span>\n );\n };\n}\n"]}
@@ -56,6 +56,12 @@ export interface MenuItemProps extends CommonProps {
56
56
  * HTML-атрибут `href`.
57
57
  */
58
58
  href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];
59
+ /**
60
+ * HTML-атрибут `rel`.
61
+ *
62
+ * Для внешних ссылок аттрибут rel по умолчанию равен "noopener noreferrer"
63
+ */
64
+ rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];
59
65
  /**
60
66
  * Заменяет корневой элемент, на компонент переданный в проп.
61
67
  *
@@ -10,7 +10,13 @@ var _CommonWrapper = require("../../internal/CommonWrapper");
10
10
  var _Emotion = require("../../lib/theming/Emotion");
11
11
  var _rootNodeDecorator = require("../../lib/rootNode/rootNodeDecorator");
12
12
 
13
- var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment", "icon", "loose", "state", "_enableIconPadding", "component", "onMouseEnter", "onMouseLeave", "isMobile"];var _class, _class2, _temp;
13
+ var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment", "icon", "loose", "state", "_enableIconPadding", "component", "onMouseEnter", "onMouseLeave", "isMobile", "href", "rel"];var _class, _class2, _temp;
14
+
15
+
16
+
17
+
18
+
19
+
14
20
 
15
21
 
16
22
 
@@ -144,7 +150,9 @@ MenuItem = (0, _rootNodeDecorator.rootNode)(_class = (_temp = _class2 = /*#__PUR
144
150
 
145
151
 
146
152
 
147
- props.link,comment = props.comment,icon = props.icon,loose = props.loose,state = props.state,_enableIconPadding = props._enableIconPadding,component = props.component,onMouseEnter = props.onMouseEnter,onMouseLeave = props.onMouseLeave,isMobile = props.isMobile,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
153
+
154
+
155
+ props.link,comment = props.comment,icon = props.icon,loose = props.loose,state = props.state,_enableIconPadding = props._enableIconPadding,component = props.component,onMouseEnter = props.onMouseEnter,onMouseLeave = props.onMouseLeave,isMobile = props.isMobile,href = props.href,_props$rel = props.rel,rel = _props$rel === void 0 ? _this.props.href && (0, _utils.isExternalLink)(_this.props.href) ? 'noopener noreferrer' : _this.props.rel : _props$rel,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
148
156
 
149
157
  var hover = state === 'hover' && !_this.props.disabled;
150
158
 
@@ -181,6 +189,8 @@ MenuItem = (0, _rootNodeDecorator.rootNode)(_class = (_temp = _class2 = /*#__PUR
181
189
  onMouseOver: _this.handleMouseEnterFix,
182
190
  onMouseLeave: _this.handleMouseLeave,
183
191
  className: className,
192
+ href: href,
193
+ rel: href ? rel : undefined,
184
194
  tabIndex: -1 }),
185
195
 
186
196
  iconElement,
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","comment","MenuItem","rootNode","mouseEntered","renderMain","props","link","icon","loose","state","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","rest","hover","disabled","iconElement","styles","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","handleMouseEnterFix","handleMouseLeave","commentHover","e","href","render","setRootNode","React","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends CommonProps {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = <div className={styles.icon(this.theme)}>{icon}</div>;\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n tabIndex={-1}\n >\n {iconElement}\n {content}\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
1
+ {"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","comment","MenuItem","rootNode","mouseEntered","renderMain","props","link","icon","loose","state","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","rel","rest","hover","disabled","iconElement","styles","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","handleMouseEnterFix","handleMouseLeave","undefined","commentHover","e","render","setRootNode","React","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isExternalLink, isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends CommonProps {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = <div className={styles.icon(this.theme)}>{icon}</div>;\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n {content}\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
@@ -26,6 +26,10 @@ export interface SidePageProps extends CommonProps {
26
26
  * Escape или на крестик).
27
27
  */
28
28
  onClose?: () => void;
29
+ /**
30
+ * Вызывается, когда анимация открытия сайдпейджа полностью прошла
31
+ */
32
+ onOpened?: () => void;
29
33
  /**
30
34
  * Показывать сайдпэйдж слева
31
35
  *
@@ -85,6 +89,7 @@ export declare class SidePage extends React.Component<SidePageProps, SidePageSta
85
89
  componentWillUnmount(): void;
86
90
  /**
87
91
  * Обновляет разметку компонента.
92
+ * SidePage следит за изменениям размера SidePage.Body и вызывает этот метод автоматически.
88
93
  * @public
89
94
  */
90
95
  updateLayout: () => void;