@oliasoft-open-source/react-ui-library 4.10.8 → 4.10.10-beta-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/assets/{index-DoFa61ar.js → index-DNn0fRjY.js} +6 -0
  2. package/dist/global.css +12 -14
  3. package/dist/index.html +1 -1
  4. package/dist/index.js +158 -152
  5. package/dist/index.js.map +1 -1
  6. package/dist/storybook/assets/{Color-KGDBMAHA-Dt2NN35S.js → Color-KGDBMAHA-Ctoumk1_.js} +1 -1
  7. package/dist/storybook/assets/{DocsRenderer-PKQXORMH-Dt4AywHY.js → DocsRenderer-PKQXORMH-D6snvJ2n.js} +1 -1
  8. package/dist/storybook/assets/{accordion.stories-BTxV-ybU.js → accordion.stories-DFLo2Xxp.js} +2 -2
  9. package/dist/storybook/assets/{afe.stories-DFQsvqIV.js → afe.stories-DM18uTAa.js} +2 -2
  10. package/dist/storybook/assets/{buttons-and-links-DeM87L0f.js → buttons-and-links-Cp6CY221.js} +1 -1
  11. package/dist/storybook/assets/{casing-loads.stories-CJpnsmsZ.js → casing-loads.stories-D2tl6Xaj.js} +2 -2
  12. package/dist/storybook/assets/{cell.stories-Bpl0Squh.js → cell.stories-3u3qlMqR.js} +2 -2
  13. package/dist/storybook/assets/check-box.stories-BJ0ShmeC.js +97 -0
  14. package/dist/storybook/assets/check-box.test-case.stories-CzuYZkUh.js +30 -0
  15. package/dist/storybook/assets/{chunk-HLWAVYOI-CP6RR10g.js → chunk-HLWAVYOI-kUA3ddmK.js} +1 -1
  16. package/dist/storybook/assets/{color-BeVjwOuK.js → color-B-anC3UD.js} +1 -1
  17. package/dist/storybook/assets/enum-Bnn40S8Q.js +1 -0
  18. package/dist/storybook/assets/footer.stories-BHyYr-w1.js +3 -0
  19. package/dist/storybook/assets/form.stories-f2Uxr04c.js +49 -0
  20. package/dist/storybook/assets/{formation.stories-BT8VrcqV.js → formation.stories-Djd9Xcyb.js} +2 -2
  21. package/dist/storybook/assets/helpers-JJxzGegQ.js +1 -0
  22. package/dist/storybook/assets/iframe-BPqD7cXD.js +2 -0
  23. package/dist/storybook/assets/{index-B4RCKdW0.js → index-C_d1lYll.js} +88 -88
  24. package/dist/storybook/assets/{index-BXS7i-H6.js → index-D_vfgX3I.js} +1 -1
  25. package/dist/storybook/assets/{input-group.stories-CElwRt3p.js → input-group.stories-EhmORqH9.js} +3 -3
  26. package/dist/storybook/assets/{input-validation-Plr4Q99k.js → input-validation-DWk2h2sH.js} +2 -2
  27. package/dist/storybook/assets/{inputs-DRQYRbsV.js → inputs-DxXk84P7.js} +2 -2
  28. package/dist/storybook/assets/{layout-forms-dQ6e8ua1.js → layout-forms-DsvEdOzO.js} +5 -5
  29. package/dist/storybook/assets/{layout-general-B7yaYduN.js → layout-general-Be12Eyfp.js} +1 -1
  30. package/dist/storybook/assets/menu.stories-DLJSzJa-.js +82 -0
  31. package/dist/storybook/assets/menu.test-case.stories-DyrNbGBs.js +3 -0
  32. package/dist/storybook/assets/modal.stories-DOgeTuHT.js +200 -0
  33. package/dist/storybook/assets/modal.test-case.stories-DQ1Izuq6.js +21 -0
  34. package/dist/storybook/assets/{number-input-Bpg4Yqmo.js → number-input-CJJvhIIv.js} +1 -1
  35. package/dist/storybook/assets/number-input.stories-CKVq60XH.js +89 -0
  36. package/dist/storybook/assets/number-input.test-case.stories-Dh1F7N8M.js +92 -0
  37. package/dist/storybook/assets/{padding-and-spacing-D8xvyqXz.js → padding-and-spacing-BSmTd9GW.js} +1 -1
  38. package/dist/storybook/assets/{pagination-CLt-kUlx.js → pagination-DWc8zp3k.js} +1 -1
  39. package/dist/storybook/assets/{pagination.stories-CTRM0Xou.js → pagination.stories-B5cOvzik.js} +2 -2
  40. package/dist/storybook/assets/popover.stories-p9_-pH_Q.js +10 -0
  41. package/dist/storybook/assets/{preview-B2Y6Vmrm.js → preview-CL_1oTTQ.js} +1 -1
  42. package/dist/storybook/assets/{preview-CaCL0Opd.js → preview-DZPidHkD.js} +2 -2
  43. package/dist/storybook/assets/{projects.stories-BQswWVCx.js → projects.stories-Co_WnKSx.js} +2 -2
  44. package/dist/storybook/assets/{radio-button-DmDuw4DA.js → radio-button-C4ljBRED.js} +1 -1
  45. package/dist/storybook/assets/radio-button.stories-D1rWr6ms.js +61 -0
  46. package/dist/storybook/assets/radio-button.test-case.stories-DglmHlWs.js +11 -0
  47. package/dist/storybook/assets/{reservoirs.stories-B12tIrmZ.js → reservoirs.stories-UW_8sofe.js} +2 -2
  48. package/dist/storybook/assets/{rich-text-input.stories-DkaOBgbE.js → rich-text-input.stories-CK_OTGiV.js} +3 -3
  49. package/dist/storybook/assets/{row.stories-msEoNdGI.js → row.stories-BuIxD-aT.js} +2 -2
  50. package/dist/storybook/assets/select-03uRbc4I.js +61 -0
  51. package/dist/storybook/assets/select.input-CJed_LLR.js +1 -0
  52. package/dist/storybook/assets/select.stories-Bpffz9TF.js +498 -0
  53. package/dist/storybook/assets/select.stories-data-DxgWKlU6.js +1 -0
  54. package/dist/storybook/assets/select.test-case.stories-DwDNDHax.js +82 -0
  55. package/dist/storybook/assets/{site.stories-umpPYjkq.js → site.stories-ZGohyW6Z.js} +2 -2
  56. package/dist/storybook/assets/{slider-C7vnj_3M.js → slider-CNPYg8Sz.js} +3 -3
  57. package/dist/storybook/assets/{slider-DnRddBCy.css → slider-LRg-kjEJ.css} +1 -1
  58. package/dist/storybook/assets/slider.stories-BH6uxhwC.js +125 -0
  59. package/dist/storybook/assets/{table-5Y5KPNSk.js → table-B5fM_vjN.js} +1 -1
  60. package/dist/storybook/assets/{table.stories-Clltxls0.js → table.stories-HRJd7a1D.js} +2 -2
  61. package/dist/storybook/assets/{tabs-C3NG6m9W.js → tabs-BoToLVEP.js} +1 -1
  62. package/dist/storybook/assets/tabs.stories-B52iEaHf.js +30 -0
  63. package/dist/storybook/assets/{title.stories-CsrYTGde.js → title.stories-C1rVRHkF.js} +3 -3
  64. package/dist/storybook/assets/toaster.stories-G6nKp3uV.js +84 -0
  65. package/dist/storybook/assets/toaster.test-case.stories-CCHTh_U1.js +6 -0
  66. package/dist/storybook/assets/toggle.stories-BAislK3I.js +106 -0
  67. package/dist/storybook/assets/toggle.test-case.stories-CeUwdhGD.js +36 -0
  68. package/dist/storybook/assets/{tooltip.test-case.stories-CHibN8rC.js → tooltip.test-case.stories-C0wxGvKJ.js} +1 -1
  69. package/dist/storybook/assets/unit-input-maDNevEK.js +10 -0
  70. package/dist/storybook/assets/unit-input.stories-CZBOk2N9.js +198 -0
  71. package/dist/storybook/assets/unit-input.test-case.stories-DQIpam5Y.js +220 -0
  72. package/dist/storybook/assets/unit-table.stories-DVqdGdEC.js +152 -0
  73. package/dist/storybook/assets/unit-table.test-case.stories-CThfe_IO.js +1 -0
  74. package/dist/storybook/iframe.html +1 -1
  75. package/dist/storybook/index.json +1 -1
  76. package/dist/storybook/project.json +1 -1
  77. package/package.json +1 -1
  78. package/dist/404.html +0 -1
  79. package/dist/storybook/assets/check-box.stories-DfbWw6mD.js +0 -126
  80. package/dist/storybook/assets/footer.stories-DgjDE_JR.js +0 -3
  81. package/dist/storybook/assets/form.stories-BrUnmw7R.js +0 -49
  82. package/dist/storybook/assets/iframe-CLpyA5uB.js +0 -2
  83. package/dist/storybook/assets/menu.stories-xWX80Eh2.js +0 -84
  84. package/dist/storybook/assets/modal.stories-LhoWfDE6.js +0 -220
  85. package/dist/storybook/assets/number-input.stories-DhCjZ37u.js +0 -180
  86. package/dist/storybook/assets/popover.stories-CGm0M5fv.js +0 -10
  87. package/dist/storybook/assets/radio-button.stories-5gvV0LD0.js +0 -71
  88. package/dist/storybook/assets/select-DnRuRG_N.js +0 -61
  89. package/dist/storybook/assets/select.input-D0UkAPd9.js +0 -1
  90. package/dist/storybook/assets/select.stories-B9w9ONzj.js +0 -579
  91. package/dist/storybook/assets/slider.stories-BzBb3PkP.js +0 -171
  92. package/dist/storybook/assets/tabs.stories-dsXjRHJy.js +0 -30
  93. package/dist/storybook/assets/toaster.stories-HO4VBTy-.js +0 -89
  94. package/dist/storybook/assets/toggle.stories-qTHFTXxI.js +0 -141
  95. package/dist/storybook/assets/unit-input.stories-DoCaLohq.js +0 -426
  96. package/dist/storybook/assets/unit-table.stories-uy3ukIal.js +0 -152
@@ -0,0 +1,220 @@
1
+ import{j as e}from"./jsx-runtime-eps93zm2.js";import{r as d}from"./index-DhsZuJvc.js";import{d as b}from"./index-C0x1JmaP.js";import{w as f,u as s,e as l,f as V,a as D}from"./index-DMAnyMX5.js";import{U as u}from"./unit-input-maDNevEK.js";import{B as o}from"./button-DHevvVBE.js";import{S as g}from"./spacer-BWoNR27H.js";import{D as fe}from"./divider-DY9nJ_7N.js";import{R as Ce,C as _}from"./row-Bmiy2Lh0.js";import{F as U}from"./field-HrLaMLbx.js";import{M as pe}from"./message-Y48EomV-.js";import{G as ge}from"./grid-DRkC-bt8.js";import{C as v}from"./card-EcjmryU9.js";import{H as y}from"./heading-CRNoBc7q.js";import{T as N}from"./toggle-BbFVf61v.js";import{T as q}from"./text-B3-TSWok.js";import{S as xe}from"./select-03uRbc4I.js";import{I as he}from"./icon-BSFY3vDO.js";import"./index-DRSy5Ssd.js";import"./index-CF7H4eMJ.js";import"./index-Bk2sglWO.js";import"./use-previous-D775JrO6.js";import"./actions-D-uVCDzk.js";import"./lodash-c4VUpsOs.js";import"./common-types-Sih75Sav.js";import"./disabled-context-rmpd7YJS.js";import"./tooltip-1V7clEnw.js";import"./index-CUZDtIZe.js";import"./types-BmbYqTX_.js";import"./types-Dx2TtIG9.js";import"./badge-CLQ59MDF.js";import"./input-group-addon-D68iUKV2.js";import"./input-group-BaRSJAEN.js";import"./number-input-CJJvhIIv.js";import"./enum-Bnn40S8Q.js";import"./index-CEuq6vkz.js";import"./helpers-JJxzGegQ.js";import"./input-DTXbDJaL.js";import"./spinner-AWUe4xwQ.js";import"./styled-components.browser.esm-BQ9GQzDc.js";import"./label-CqmyC9he.js";import"./help-icon-Buhx5nl6.js";import"./inheritsLoose-DP0QEDDI.js";import"./assertThisInitialized-B9jnkVVz.js";import"./memoize-one.esm-CcMeOnPo.js";import"./select.input-CJed_LLR.js";import"./objectWithoutPropertiesLoose-CAYKN5F1.js";const ht={title:"Forms/UnitInput/Test Cases",component:u,tags:["!autodocs"]},C=()=>{const[i,a]=d.useState("123|m");return e.jsx(u,{name:"example",onChange:t=>a(t.target.value),placeholder:"Type a value...",value:i,initUnit:"m",unitkey:"depth",unitTemplate:{depth:"m"},testId:"testId"})};C.play=async({canvasElement:i,step:a})=>{const t=f(i),r=f(i.ownerDocument.body);await a("Shows validation error for non-numeric input",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"123x45s6"),await l(t.getByDisplayValue("123x45s6")).toBeInTheDocument(),await V.mouseOver(n),await D(()=>{l(r.getByText("Must be a numerical value")).toBeInTheDocument()})})};const x=()=>{const[i,a]=d.useState("|m");return e.jsx(u,{name:"example-ft",onChange:t=>a(t.target.value),placeholder:"7|ft",value:i,initUnit:"m",unitkey:"depth",unitTemplate:{depth:"m"},testId:"testId-ft"})};x.play=async({canvasElement:i,step:a})=>{const t=f(i),r=f(i.ownerDocument.body);await a("Handle input with unit only",async()=>{const n=t.getByTestId("testId-ft");await l(t.getByDisplayValue("")).toBeInTheDocument(),await V.mouseOver(n),await D(()=>{l(r.queryByText("Must be a numerical value")).not.toBeInTheDocument()})}),await a("Clear input and check placeholder",async()=>{const n=t.getByTestId("testId-ft");await s.clear(n),await l(n).toHaveAttribute("placeholder","2.13")}),await a("Type a correct numeric value and ensure no error",async()=>{const n=t.getByTestId("testId-ft");await s.type(n,"123"),await l(t.getByDisplayValue("123")).toBeInTheDocument(),await V.mouseOver(n),await D(()=>{l(r.queryByText("Must be a numerical value")).not.toBeInTheDocument()})}),await a("Remove value, type incorrect value and check for error",async()=>{const n=t.getByTestId("testId-ft");await s.clear(n),await s.type(n,"123abc"),await l(t.getByDisplayValue("123abc")).toBeInTheDocument(),await V.mouseOver(n),await D(()=>{l(r.getByText("Must be a numerical value")).toBeInTheDocument()})})};const T=i=>{const[a,t]=d.useState("123|m"),[r,n]=d.useState("223|m"),[c,h]=d.useState("ft");return e.jsxs(e.Fragment,{children:[e.jsx(o,{label:"Change initUnit",onClick:()=>h(c==="m"?"ft":"m")}),e.jsx(g,{}),e.jsx(o,{label:"Change value",onClick:()=>t(a==="123|m"?"456|m":"123|m")}),e.jsx(g,{}),e.jsx(u,{name:"example",onChange:m=>{t(m.target.value)},unitkey:"length",value:a,initUnit:c,onSwitchUnit:h}),e.jsx(g,{}),e.jsx(u,{name:"example2",onChange:m=>{n(m.target.value)},unitkey:"length",value:r,initUnit:c,onSwitchUnit:h}),e.jsx(fe,{}),e.jsx("h4",{children:"Without initUnit property (taken from the redux store)"}),e.jsx(u,{name:"example",onChange:m=>{t(m.target.value)},unitkey:"length",value:a,onSwitchUnit:h}),e.jsx(u,{name:"example2",onChange:m=>{n(m.target.value)},unitkey:"length",value:r,onSwitchUnit:h})]})};T.parameters={docs:{description:{story:"[OW-4380](https://oliasoft.atlassian.net/browse/OW-4380?atlOrigin=eyJpIjoiMmM1N2RkNWU3Mjk5NDYxY2E0YzhkMzk5ZTVmZTJhMjciLCJwIjoiaiJ9)"}}};const I=()=>{const i="500px",[a,t]=d.useState(void 0);return e.jsxs(e.Fragment,{children:[e.jsx("h4",{children:"Different edge cases such as +/- infinity, undefined, NaN, null:"}),e.jsxs(Ce,{children:[e.jsxs(_,{width:"25%",children:[e.jsx(o,{label:"Change value infinity",onClick:()=>t(1/0)}),e.jsx("br",{}),e.jsx(o,{label:"Change value -infinity",onClick:()=>t(-1/0)}),e.jsx("br",{}),e.jsx(o,{label:"Change value null",onClick:()=>t(null)}),e.jsx("br",{}),e.jsx(o,{label:"Change value - undefined",onClick:()=>t(void 0)}),e.jsx("br",{}),e.jsx(o,{label:"Change value - NaN",onClick:()=>t(NaN)}),e.jsx("br",{}),e.jsx(o,{label:"Change value - nothing (empty)",onClick:()=>t(void 0)}),e.jsx("br",{}),e.jsx(o,{label:"Change value - empty string",onClick:()=>t("")})]}),e.jsxs(_,{width:"25%",children:[e.jsx(o,{label:"Change value infinity|m",onClick:()=>t("Infinity|m")}),e.jsx("br",{}),e.jsx(o,{label:"Change value -infinity|m",onClick:()=>t("-Infinity|m")}),e.jsx("br",{}),e.jsx(o,{label:"Change value null|m",onClick:()=>t("null|m")}),e.jsx("br",{}),e.jsx(o,{label:"Change value - undefined|m",onClick:()=>t("undefined|m")}),e.jsx("br",{}),e.jsx(o,{label:"Change value - NaN|m",onClick:()=>t("NaN|m")}),e.jsx("br",{}),e.jsx(o,{label:"Change value - nothing (empty)|m",onClick:()=>t("|m")})]})]}),e.jsx("br",{}),e.jsx(U,{label:"Normal PUI",children:e.jsx(u,{name:"example1",onChange:r=>t(r.target.value),value:a,unitkey:"length",width:i,placeholder:"value|unit"})}),e.jsx(U,{label:"Disabled validation",children:e.jsx(u,{name:"example2",onChange:r=>t(r.target.value),value:a,unitkey:"length",disabledValidation:!0,width:i})}),e.jsx(U,{label:"Disabled validation and manual error",children:e.jsx(u,{name:"example3",onChange:r=>t(r.target.value),value:a,unitkey:"length",error:"test",disabledValidation:!0,width:i})}),e.jsx(pe,{message:{heading:"Current value inside PUI: "+a,visible:!0}})]})};I.parameters={docs:{description:{story:"[OW-8884](https://oliasoft.atlassian.net/browse/OW-8884)"}}};const j=()=>{const[i,a]=d.useState(!0),t=()=>{a(!1),setTimeout(()=>a(!0),0)},[r,n]=d.useState("123|ft");return e.jsxs(ge,{columns:"1fr 1fr",gap:!0,children:[e.jsxs(v,{heading:e.jsx(y,{children:"Storage State (Redux)"}),children:[r,e.jsx(g,{}),e.jsx(o,{label:"Change value",onClick:()=>n(b.withUnit(String(Math.floor(Math.random()*100)),"ft"))})]}),e.jsx(v,{heading:e.jsx(y,{icon:e.jsx(he,{icon:"refresh",testId:"triggerRerenderTestId"}),onIconClick:t,children:"UnitInput"}),children:i&&e.jsx(u,{name:"example",onChange:c=>n(c.target.value),value:r,initUnit:"m",unitkey:"depth",unitTemplate:{depth:"m"}})})]})},S=()=>e.jsxs(e.Fragment,{children:[e.jsx(q,{faint:!0,children:"Reproduce OW-10614 rounding noise bug when storing values in a different unit to the display unit"}),e.jsx(g,{}),e.jsx(u,{name:"example",onChange:()=>{},value:b.withUnit(b.convertAndGetValue("9750|psi","bar"),"bar"),initUnit:"psi",unitkey:"pressure",unitTemplate:{pressure:"psi"}}),e.jsx(g,{}),e.jsx(u,{name:"example2",onChange:()=>{},value:b.withUnit(b.convertAndGetValue("8642|lbf","tonneForce"),"tonneForce"),initUnit:"lbf",unitkey:"force",unitTemplate:{force:"tonneForce"}})]}),w=()=>e.jsxs(e.Fragment,{children:[e.jsx(u,{name:"example",unitkey:"moleWeight",initUnit:"g/mol",doNotConvertValue:!0,value:"170|g/mol",unitTemplate:{moleWeight:"g/mol"},testId:"case1"}),e.jsx(g,{}),e.jsx(u,{name:"gor",unitkey:"moleWeight",initUnit:"gor",value:"Infinity|SCF/STB",testId:"case2"})]});w.play=async({canvasElement:i,step:a})=>{const t=f(i);await a("Can enter decimal values",async()=>{await l(t.getByDisplayValue("170")).toBeInTheDocument(),await l(t.getByDisplayValue("")).toBeInTheDocument()})};const B=()=>{const[i,a]=d.useState(!0),t=()=>{a(!1),setTimeout(()=>a(!0),0)},[r,n]=d.useState("psi"),[c,h]=d.useState(!1),[m,ve]=d.useState(!0),[F,ye]=d.useState(!0),[R,W]=d.useState("672.2388357750001|bar"),[M,be]=d.useState("");return e.jsxs(ge,{columns:"1fr 1fr",gap:!0,children:[e.jsxs(v,{heading:e.jsx(y,{children:"Settings"}),children:[e.jsx(U,{label:"Enable display rounding:",labelLeft:!0,labelWidth:200,children:e.jsx(N,{checked:c,onChange:p=>h(p.target.checked)})}),e.jsx(U,{label:"Enable cosmetic rounding:",labelLeft:!0,labelWidth:200,children:e.jsx(N,{checked:m,onChange:p=>ve(p.target.checked)})}),e.jsx(U,{label:"Convert back to storage unit (onChange):",labelLeft:!0,labelWidth:200,children:e.jsx(N,{checked:F,onChange:p=>ye(p.target.checked)})})]}),e.jsxs(v,{heading:e.jsx(y,{icon:e.jsx(he,{icon:"refresh",testId:"triggerRerenderTestId"}),onIconClick:t,children:"UnitInput"}),children:[e.jsx(q,{faint:!0,children:"Cosmetic Rounding Test Case: type 9750 then return (compare with enableCosmeticRounding on and off)"}),e.jsx(g,{}),e.jsx(q,{warning:!0,children:"Note: UnitInput uses convertSamePrecision internally (decision prior to cosmetic value implementation). This means not all rounding noise occurrences seen in NumberInput will be reproducible in UnitInput, because they get rounded off by other logic."}),e.jsx(g,{}),i&&e.jsx(u,{name:"Example",unitkey:"pressure",initUnit:r,unitTemplate:{pressure:"psi"},value:R,onChange:p=>{const{value:E}=p.target;E&&W(E)},enableDisplayRounding:c,enableCosmeticRounding:m,error:b.convertAndGetValue(R,"bar")>=0?"":"Value must be positive",validationCallback:(p,E)=>{be(E??"")},convertBackToStorageUnit:F})]}),e.jsx(v,{heading:e.jsx(y,{children:"Unit Template"}),children:e.jsx(xe,{options:[{label:"Bar",value:"bar"},{label:"psi",value:"psi"}],value:r,width:70,onChange:p=>n(p.target.value)})}),e.jsx(v,{heading:e.jsx(y,{children:"Test Validation Callback"}),children:M&&e.jsx(pe,{message:{content:M,icon:!0,type:"Error",visible:!0}})}),e.jsxs(v,{heading:e.jsx(y,{children:"Storage State / Redux"}),children:[R,e.jsx(g,{}),e.jsx(o,{label:"Change value",onClick:()=>W(b.withUnit(String(Math.floor(Math.random()*100)),"bar"))})]})]})},k=()=>{const[i,a]=d.useState("123|m");return e.jsx(u,{name:"example",onChange:t=>a(t.target.value),value:i,initUnit:"m",unitkey:"depth",unitTemplate:{depth:"m"},testId:"testId"})};k.play=async({canvasElement:i,step:a})=>{const t=f(i),r=f(i.ownerDocument.body);await a("Can enter decimal values",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"123.123456789"),await l(t.getByDisplayValue("123.123456789")).toBeInTheDocument()}),await a("Can enter scientific notation",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"-1.12e3"),await l(t.getByDisplayValue("-1.12e3")).toBeInTheDocument()}),await a("Can enter comma decimals (converts to dot)",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"123,456"),await l(t.getByDisplayValue("123.456")).toBeInTheDocument()}),await a("Can enter small numbers",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"0.0000000023"),await l(t.getByDisplayValue("0.0000000023")).toBeInTheDocument()}),await a("Can enter large numbers",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"999999999999"),await l(t.getByDisplayValue("999999999999")).toBeInTheDocument()}),await a("Can convert units",async()=>{const n=t.getByTestId("testId"),c=t.getByTestId("testId-menu");await s.clear(n),await s.type(n,"456.1"),await s.click(c),await s.click(r.getByTestId("testId-unit-ft")),await l(t.getByDisplayValue("1496")).toBeInTheDocument()}),await a("Shows validation error for non-numeric input",async()=>{const n=t.getByTestId("testId");await s.clear(n),await s.type(n,"123x45s6"),await l(t.getByDisplayValue("123x45s6")).toBeInTheDocument(),await V.mouseOver(n),await D(()=>{l(r.getByText("Must be a numerical value")).toBeInTheDocument()})})};C.__docgenInfo={description:"",methods:[{name:"play",docblock:null,modifiers:["static"],params:[{name:"{ canvasElement, step }",optional:!1,type:null}],returns:null}],displayName:"Placeholder"};x.__docgenInfo={description:"",methods:[{name:"play",docblock:null,modifiers:["static"],params:[{name:"{ canvasElement, step }",optional:!1,type:null}],returns:null}],displayName:"PlaceholderWithUnit"};T.__docgenInfo={description:"",methods:[],displayName:"TestExternalStateChangeWithSynchronizedUnits",props:{name:{required:!0,tsType:{name:"union",raw:"string | { fieldName?: string }",elements:[{name:"string"},{name:"signature",type:"object",raw:"{ fieldName?: string }",signature:{properties:[{key:"fieldName",value:{name:"string",required:!1}}]}}]},description:""},placeholder:{required:!1,tsType:{name:"string"},description:""},disabled:{required:!1,tsType:{name:"boolean"},description:""},disabledUnit:{required:!1,tsType:{name:"boolean"},description:""},error:{required:!1,tsType:{name:"union",raw:"string | null | boolean",elements:[{name:"string"},{name:"null"},{name:"boolean"}]},description:""},left:{required:!1,tsType:{name:"boolean"},description:""},small:{required:!1,tsType:{name:"boolean"},description:""},width:{required:!1,tsType:{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]},description:""},value:{required:!1,tsType:{name:"string"},description:""},unitkey:{required:!1,tsType:{name:"string"},description:""},initUnit:{required:!1,tsType:{name:"string"},description:""},noConversion:{required:!1,tsType:{name:"boolean"},description:""},doNotConvertValue:{required:!1,tsType:{name:"boolean"},description:""},testId:{required:!1,tsType:{name:"string"},description:""},warning:{required:!1,tsType:{name:"union",raw:"string | boolean | null",elements:[{name:"string"},{name:"boolean"},{name:"null"}]},description:""},predefinedOptions:{required:!1,tsType:{name:"union",raw:"IPredefinedOption[] | null",elements:[{name:"Array",elements:[{name:"IPredefinedOption"}],raw:"IPredefinedOption[]"},{name:"null"}]},description:""},initialPredefinedOption:{required:!1,tsType:{name:"boolean"},description:""},shouldLinkAutomaticly:{required:!1,tsType:{name:"boolean"},description:""},selectedPredefinedOptionKey:{required:!1,tsType:{name:"string"},description:""},validationCallback:{required:!1,tsType:{name:"signature",type:"function",raw:"(name: string, error: string | null) => any",signature:{arguments:[{type:{name:"string"},name:"name"},{type:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}]},name:"error"}],return:{name:"any"}}},description:""},disabledValidation:{required:!1,tsType:{name:"boolean"},description:""},allowEmpty:{required:!1,tsType:{name:"boolean"},description:""},autoValue:{required:!1,tsType:{name:"string"},description:""},onChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(event: TChangeEvent | ICustomChangeEvent) => void",signature:{arguments:[{type:{name:"union",raw:"TChangeEvent | ICustomChangeEvent",elements:[{name:"intersection",raw:`ChangeEvent<T> & {
2
+ target:
3
+ | T
4
+ | { name: string; value: any; label?: string; files?: FileList | null };
5
+ }`,elements:[{name:"ChangeEvent",elements:[{name:"T"}],raw:"ChangeEvent<T>"},{name:"signature",type:"object",raw:`{
6
+ target:
7
+ | T
8
+ | { name: string; value: any; label?: string; files?: FileList | null };
9
+ }`,signature:{properties:[{key:"target",value:{name:"union",raw:`| T
10
+ | { name: string; value: any; label?: string; files?: FileList | null }`,elements:[{name:"T"},{name:"signature",type:"object",raw:"{ name: string; value: any; label?: string; files?: FileList | null }",signature:{properties:[{key:"name",value:{name:"string",required:!0}},{key:"value",value:{name:"any",required:!0}},{key:"label",value:{name:"string",required:!1}},{key:"files",value:{name:"union",raw:"FileList | null",elements:[{name:"FileList"},{name:"null"}],required:!1}}]}}],required:!0}}]}}]},{name:"ICustomChangeEvent"}]},name:"event"}],return:{name:"void"}}},description:""},onSwitchUnit:{required:!1,tsType:{name:"signature",type:"function",raw:"(unit: string) => void",signature:{arguments:[{type:{name:"string"},name:"unit"}],return:{name:"void"}}},description:""},onClick:{required:!1,tsType:{name:"MouseEventHandler",elements:[{name:"HTMLInputElement"}],raw:"MouseEventHandler<HTMLInputElement>"},description:""},onFocus:{required:!1,tsType:{name:"FocusEventHandler",elements:[{name:"HTMLInputElement"}],raw:"FocusEventHandler<HTMLInputElement>"},description:""},unitTemplate:{required:!1,tsType:{name:"Record",elements:[{name:"string"},{name:"any"}],raw:"Record<string, any>"},description:""},convertBackToStorageUnit:{required:!1,tsType:{name:"boolean"},description:""},enableCosmeticRounding:{required:!1,tsType:{name:"boolean"},description:""},enableDisplayRounding:{required:!1,tsType:{name:"boolean"},description:""}}};I.__docgenInfo={description:"",methods:[],displayName:"TestEdgeCases"};j.__docgenInfo={description:"",methods:[],displayName:"ManagedTestCase"};S.__docgenInfo={description:"",methods:[],displayName:"OW_10614TestCase"};w.__docgenInfo={description:"",methods:[{name:"play",docblock:null,modifiers:["static"],params:[{name:"{ canvasElement, step }",optional:!1,type:null}],returns:null}],displayName:"OW_17784TestCase"};B.__docgenInfo={description:"",methods:[],displayName:"DemoCosmeticRounding"};k.__docgenInfo={description:"",methods:[{name:"play",docblock:null,modifiers:["static"],params:[{name:"{ canvasElement, step }",optional:!1,type:null}],returns:null}],displayName:"TestUserInput"};var H,O,P;C.parameters={...C.parameters,docs:{...(H=C.parameters)==null?void 0:H.docs,source:{originalSource:`() => {
11
+ const [value, setValue] = useState('123|m');
12
+ return <UnitInput name="example" onChange={evt => setValue(evt.target.value)} placeholder="Type a value..." value={value} initUnit="m" unitkey="depth" unitTemplate={{
13
+ depth: 'm'
14
+ }} testId="testId" />;
15
+ }`,...(P=(O=C.parameters)==null?void 0:O.docs)==null?void 0:P.source}}};var L,G,A;x.parameters={...x.parameters,docs:{...(L=x.parameters)==null?void 0:L.docs,source:{originalSource:`() => {
16
+ const [value, setValue] = useState('|m');
17
+ return <UnitInput name="example-ft" onChange={evt => setValue(evt.target.value)} placeholder="7|ft" value={value} initUnit="m" unitkey="depth" unitTemplate={{
18
+ depth: 'm'
19
+ }} testId="testId-ft" />;
20
+ }`,...(A=(G=x.parameters)==null?void 0:G.docs)==null?void 0:A.source}}};var z,J,Y;T.parameters={...T.parameters,docs:{...(z=T.parameters)==null?void 0:z.docs,source:{originalSource:`(args: IUnitInputProps) => {
21
+ const [value, setValue] = useState('123|m');
22
+ const [value2, setValue2] = useState('223|m');
23
+ const [initUnit, setInitUnit] = useState('ft');
24
+ return <>
25
+ <Button label="Change initUnit" onClick={() => setInitUnit(initUnit === 'm' ? 'ft' : 'm')} />
26
+ <Spacer />
27
+ <Button label="Change value" onClick={() => setValue(value === '123|m' ? '456|m' : '123|m')} />
28
+ <Spacer />
29
+ <UnitInput name="example" onChange={evt => {
30
+ setValue(evt.target.value);
31
+ }} unitkey="length" value={value} initUnit={initUnit} onSwitchUnit={setInitUnit} />
32
+ <Spacer />
33
+ <UnitInput name="example2" onChange={evt => {
34
+ setValue2(evt.target.value);
35
+ }} unitkey="length" value={value2} initUnit={initUnit} onSwitchUnit={setInitUnit} />
36
+ <Divider />
37
+ <h4>Without initUnit property (taken from the redux store)</h4>
38
+ <UnitInput name="example" onChange={evt => {
39
+ setValue(evt.target.value);
40
+ }} unitkey="length" value={value} onSwitchUnit={setInitUnit} />
41
+ <UnitInput name="example2" onChange={evt => {
42
+ setValue2(evt.target.value);
43
+ }} unitkey="length" value={value2} onSwitchUnit={setInitUnit} />
44
+ </>;
45
+ }`,...(Y=(J=T.parameters)==null?void 0:J.docs)==null?void 0:Y.source}}};var Z,K,Q;I.parameters={...I.parameters,docs:{...(Z=I.parameters)==null?void 0:Z.docs,source:{originalSource:`() => {
46
+ const width = '500px';
47
+ const [value, setValue] = useState<any>(undefined);
48
+ return <>
49
+ <h4>Different edge cases such as +/- infinity, undefined, NaN, null:</h4>
50
+ <Row>
51
+ <Column width="25%">
52
+ <Button label="Change value infinity" onClick={() => setValue(Infinity)} />
53
+ <br />
54
+ <Button label="Change value -infinity" onClick={() => setValue(-Infinity)} />
55
+ <br />
56
+ <Button label="Change value null" onClick={() => setValue(null)} />
57
+ <br />
58
+ <Button label="Change value - undefined" onClick={() => setValue(undefined)} />
59
+ <br />
60
+ <Button label="Change value - NaN" onClick={() => setValue(NaN)} />
61
+ <br />
62
+ <Button label="Change value - nothing (empty)" onClick={() => setValue(undefined)} />
63
+ <br />
64
+ <Button label="Change value - empty string" onClick={() => setValue('')} />
65
+ </Column>
66
+ <Column width="25%">
67
+ <Button label="Change value infinity|m" onClick={() => setValue(Infinity + '|m')} />
68
+ <br />
69
+ <Button label="Change value -infinity|m" onClick={() => setValue(-Infinity + '|m')} />
70
+ <br />
71
+ <Button label="Change value null|m" onClick={() => setValue(null + '|m')} />
72
+ <br />
73
+ <Button label="Change value - undefined|m" onClick={() => setValue(undefined + '|m')} />
74
+ <br />
75
+ <Button label="Change value - NaN|m" onClick={() => setValue(NaN + '|m')} />
76
+ <br />
77
+ <Button label="Change value - nothing (empty)|m" onClick={() => setValue('|m')} />
78
+ </Column>
79
+ </Row>
80
+ <br />
81
+ <Field label="Normal PUI">
82
+ <UnitInput name="example1" onChange={evt => setValue(evt.target.value)} value={value} unitkey="length" width={width} placeholder="value|unit" />
83
+ </Field>
84
+ <Field label="Disabled validation">
85
+ <UnitInput name="example2" onChange={evt => setValue(evt.target.value)} value={value} unitkey="length" disabledValidation width={width} />
86
+ </Field>
87
+ <Field label="Disabled validation and manual error">
88
+ <UnitInput name="example3" onChange={evt => setValue(evt.target.value)} value={value} unitkey="length" error="test" disabledValidation width={width} />
89
+ </Field>
90
+ <Message message={{
91
+ heading: 'Current value inside PUI: ' + value,
92
+ visible: true
93
+ }} />
94
+ </>;
95
+ }`,...(Q=(K=I.parameters)==null?void 0:K.docs)==null?void 0:Q.source}}};var X,$,ee;j.parameters={...j.parameters,docs:{...(X=j.parameters)==null?void 0:X.docs,source:{originalSource:`() => {
96
+ const [visible, setVisible] = useState(true);
97
+ const triggerRerender = () => {
98
+ setVisible(false);
99
+ setTimeout(() => setVisible(true), 0);
100
+ };
101
+ const [value, setValue] = useState('123|ft');
102
+ return <Grid columns="1fr 1fr" gap>
103
+ <Card heading={<Heading>Storage State (Redux)</Heading>}>
104
+ {value}
105
+ <Spacer />
106
+ <Button label="Change value" onClick={() => setValue(withUnit(String(Math.floor(Math.random() * 100)), 'ft'))} />
107
+ </Card>
108
+ <Card heading={<Heading icon={<Icon icon="refresh" testId="triggerRerenderTestId" />} onIconClick={triggerRerender}>
109
+ UnitInput
110
+ </Heading>}>
111
+ {visible && <UnitInput name="example" onChange={evt => setValue(evt.target.value)} value={value} initUnit="m" unitkey="depth" unitTemplate={{
112
+ depth: 'm'
113
+ }} />}
114
+ </Card>
115
+ </Grid>;
116
+ }`,...(ee=($=j.parameters)==null?void 0:$.docs)==null?void 0:ee.source}}};var te,ne,ae;S.parameters={...S.parameters,docs:{...(te=S.parameters)==null?void 0:te.docs,source:{originalSource:`() => {
117
+ return <>
118
+ <Text faint>
119
+ Reproduce OW-10614 rounding noise bug when storing values in a different
120
+ unit to the display unit
121
+ </Text>
122
+ <Spacer />
123
+ <UnitInput name="example" onChange={() => {}} value={withUnit(convertAndGetValue('9750|psi', 'bar'), 'bar')} initUnit="psi" unitkey="pressure" unitTemplate={{
124
+ pressure: 'psi'
125
+ }} />
126
+ <Spacer />
127
+ <UnitInput name="example2" onChange={() => {}} value={withUnit(convertAndGetValue('8642|lbf', 'tonneForce'), 'tonneForce')} initUnit="lbf" unitkey="force" unitTemplate={{
128
+ force: 'tonneForce'
129
+ }} />
130
+ </>;
131
+ }`,...(ae=(ne=S.parameters)==null?void 0:ne.docs)==null?void 0:ae.source}}};var ie,re,se;w.parameters={...w.parameters,docs:{...(ie=w.parameters)==null?void 0:ie.docs,source:{originalSource:`() => {
132
+ return <>
133
+ <UnitInput name="example" unitkey="moleWeight" initUnit="g/mol" doNotConvertValue //reproduces OW_17784
134
+ value="170|g/mol" unitTemplate={{
135
+ moleWeight: 'g/mol'
136
+ }} testId="case1" />
137
+ <Spacer />
138
+ <UnitInput name="gor" unitkey="moleWeight" initUnit="gor" value="Infinity|SCF/STB" testId="case2" />
139
+ </>;
140
+ }`,...(se=(re=w.parameters)==null?void 0:re.docs)==null?void 0:se.source}}};var le,oe,ue;B.parameters={...B.parameters,docs:{...(le=B.parameters)==null?void 0:le.docs,source:{originalSource:`() => {
141
+ const [visible, setVisible] = useState(true);
142
+ const triggerRerender = () => {
143
+ setVisible(false);
144
+ setTimeout(() => setVisible(true), 0);
145
+ };
146
+ const [preferredUnit, setPreferredUnit] = useState('psi');
147
+ const [enableDisplayRounding, setEnableDisplayRounding] = useState(false);
148
+ const [enableCosmeticRounding, setEnableCosmeticRounding] = useState(true);
149
+ const [convertBackToStorageUnit, setConvertBackToStorageUnit] = useState(true);
150
+ const [value, setValue] = useState('672.2388357750001|bar');
151
+ const [callBackError, setCallBackError] = useState('');
152
+ return <Grid columns="1fr 1fr" gap>
153
+ <Card heading={<Heading>Settings</Heading>}>
154
+ <Field label="Enable display rounding:" labelLeft labelWidth={200}>
155
+ <Toggle checked={enableDisplayRounding} onChange={evt => setEnableDisplayRounding(evt.target.checked)} />
156
+ </Field>
157
+ <Field label="Enable cosmetic rounding:" labelLeft labelWidth={200}>
158
+ <Toggle checked={enableCosmeticRounding} onChange={evt => setEnableCosmeticRounding(evt.target.checked)} />
159
+ </Field>
160
+ <Field label="Convert back to storage unit (onChange):" labelLeft labelWidth={200}>
161
+ <Toggle checked={convertBackToStorageUnit} onChange={evt => setConvertBackToStorageUnit(evt.target.checked)} />
162
+ </Field>
163
+ </Card>
164
+ <Card heading={<Heading icon={<Icon icon="refresh" testId="triggerRerenderTestId" />} onIconClick={triggerRerender}>
165
+ UnitInput
166
+ </Heading>}>
167
+ <Text faint>
168
+ Cosmetic Rounding Test Case: type 9750 then return (compare with
169
+ enableCosmeticRounding on and off)
170
+ </Text>
171
+ <Spacer />
172
+ <Text warning>
173
+ Note: UnitInput uses convertSamePrecision internally (decision prior
174
+ to cosmetic value implementation). This means not all rounding noise
175
+ occurrences seen in NumberInput will be reproducible in UnitInput,
176
+ because they get rounded off by other logic.
177
+ </Text>
178
+ <Spacer />
179
+ {visible && <UnitInput name="Example" unitkey="pressure" initUnit={preferredUnit} unitTemplate={{
180
+ pressure: 'psi'
181
+ }} value={value} onChange={evt => {
182
+ const {
183
+ value
184
+ } = evt.target;
185
+ if (value) {
186
+ setValue(value);
187
+ }
188
+ }} enableDisplayRounding={enableDisplayRounding} enableCosmeticRounding={enableCosmeticRounding} error={convertAndGetValue(value, 'bar') >= 0 ? '' : 'Value must be positive'} validationCallback={(name, error) => {
189
+ setCallBackError(error ?? '');
190
+ }} convertBackToStorageUnit={convertBackToStorageUnit} />}
191
+ </Card>
192
+ <Card heading={<Heading>Unit Template</Heading>}>
193
+ <Select options={[{
194
+ label: 'Bar',
195
+ value: 'bar'
196
+ }, {
197
+ label: 'psi',
198
+ value: 'psi'
199
+ }]} value={preferredUnit} width={70} onChange={evt => setPreferredUnit(evt.target.value)} />
200
+ </Card>
201
+ <Card heading={<Heading>Test Validation Callback</Heading>}>
202
+ {callBackError && <Message message={{
203
+ content: callBackError,
204
+ icon: true,
205
+ type: 'Error',
206
+ visible: true
207
+ }} />}
208
+ </Card>
209
+ <Card heading={<Heading>Storage State / Redux</Heading>}>
210
+ {value}
211
+ <Spacer />
212
+ <Button label="Change value" onClick={() => setValue(withUnit(String(Math.floor(Math.random() * 100)), 'bar'))} />
213
+ </Card>
214
+ </Grid>;
215
+ }`,...(ue=(oe=B.parameters)==null?void 0:oe.docs)==null?void 0:ue.source}}};var de,ce,me;k.parameters={...k.parameters,docs:{...(de=k.parameters)==null?void 0:de.docs,source:{originalSource:`() => {
216
+ const [value, setValue] = useState('123|m');
217
+ return <UnitInput name="example" onChange={evt => setValue(evt.target.value)} value={value} initUnit="m" unitkey="depth" unitTemplate={{
218
+ depth: 'm'
219
+ }} testId="testId" />;
220
+ }`,...(me=(ce=k.parameters)==null?void 0:ce.docs)==null?void 0:me.source}}};const vt=["Placeholder","PlaceholderWithUnit","TestExternalStateChangeWithSynchronizedUnits","TestEdgeCases","ManagedTestCase","OW_10614TestCase","OW_17784TestCase","DemoCosmeticRounding","TestUserInput"];export{B as DemoCosmeticRounding,j as ManagedTestCase,S as OW_10614TestCase,w as OW_17784TestCase,C as Placeholder,x as PlaceholderWithUnit,I as TestEdgeCases,T as TestExternalStateChangeWithSynchronizedUnits,k as TestUserInput,vt as __namedExportsOrder,ht as default};
@@ -0,0 +1,152 @@
1
+ import{j as n}from"./jsx-runtime-eps93zm2.js";import{r as v}from"./index-DhsZuJvc.js";import{f as Q}from"./immer.esm-BwVl9PS2.js";import{d as y}from"./index-C0x1JmaP.js";import{G as X}from"./grid-DRkC-bt8.js";import{S as Y}from"./spacer-BWoNR27H.js";import{C as V}from"./card-EcjmryU9.js";import{F as L}from"./field-HrLaMLbx.js";import{H as F}from"./heading-CRNoBc7q.js";import{S as N}from"./select-03uRbc4I.js";import{T as W}from"./toggle-BbFVf61v.js";import{l as Z}from"./lodash-c4VUpsOs.js";import{u as ee}from"./use-previous-D775JrO6.js";import{T as te,C as K}from"./table-B5fM_vjN.js";import"./index-DRSy5Ssd.js";import"./styled-components.browser.esm-BQ9GQzDc.js";import"./index-Bk2sglWO.js";import"./label-CqmyC9he.js";import"./common-types-Sih75Sav.js";import"./help-icon-Buhx5nl6.js";import"./tooltip-1V7clEnw.js";import"./index-CUZDtIZe.js";import"./icon-BSFY3vDO.js";import"./objectWithoutPropertiesLoose-CAYKN5F1.js";import"./inheritsLoose-DP0QEDDI.js";import"./index-CEuq6vkz.js";import"./disabled-context-rmpd7YJS.js";import"./types-Dx2TtIG9.js";import"./enum-Bnn40S8Q.js";import"./assertThisInitialized-B9jnkVVz.js";import"./memoize-one.esm-CcMeOnPo.js";import"./types-BmbYqTX_.js";import"./text-B3-TSWok.js";import"./actions-D-uVCDzk.js";import"./button-DHevvVBE.js";import"./spinner-AWUe4xwQ.js";import"./badge-CLQ59MDF.js";import"./select.input-CJed_LLR.js";import"./helpers-JJxzGegQ.js";import"./index.es-DazXb-ul.js";import"./redux-tRgGMjwY.js";import"./objectSpread2-DW4nTBoq.js";import"./tiny-invariant-DqLgxztJ.js";import"./pagination-DWc8zp3k.js";import"./input-DTXbDJaL.js";import"./input-group-BaRSJAEN.js";import"./input-group-addon-D68iUKV2.js";import"./number-input-CJJvhIIv.js";import"./check-box-DPLaOkRR.js";import"./slider-CNPYg8Sz.js";import"./index-BI4_Bp97.js";import"./popover-rq33c1W2.js";const ne=l=>l.reduce(({preferredUnits:i,storageUnits:r},{unitKey:s,preferredUnit:a,storageUnit:m})=>(i[s]=a,r[s]=m,{preferredUnits:i,storageUnits:r}),{preferredUnits:{},storageUnits:{}}),ae=({headers:l,rows:i,selectedUnits:r,storageUnits:s,onChangeUnit:a,convertBackToStorageUnit:m,enableCosmeticRounding:h,enableDisplayRounding:U})=>{const u=l?l.map(d=>({...d,cells:d.cells.map(c=>{var t;if(c.type===K.AUTO_UNIT){const{testId:S,unitKey:p}=c;return{value:r[p],type:K.SELECT,searchable:!1,options:(t=y.getUnitsForQuantity(p))==null?void 0:t.map(T=>({label:y.label(T),value:T})),native:c.native,onChange:T=>a({unitKey:p,value:T.target.value}),testId:S}}return c})})):[],o=i?i.map((d,c)=>({...d,cells:d.cells.map((t,S)=>{if("autoUnit"in t&&(t!=null&&t.autoUnit)&&(typeof(t==null?void 0:t.value)=="string"||typeof(t==null?void 0:t.value)=="number")){const{unitKey:p,value:T,formatDisplayValue:D}=t,j=U&&"roundDisplayValue"in t?t==null?void 0:t.roundDisplayValue:null,g=r[p],b=s[p],e=g!==b,f=e?y.convertAndGetValue(T,g,b):t.value,C=D?D(f):f;return{...t,value:C,enableCosmeticRounding:h&&e,enableDisplayRounding:U,roundDisplayValue:j,onChange:w=>{const{value:x}=w.target,R=s[p],E=r[p],A=E!==R,B=m?R:E,H=A?y.convertAndGetValue(x,B,E):x;if("onChange"in t){const{onChange:I}=t,J={...w,target:{...w.target,value:String(H),rowIndex:c,cellIndex:S,unit:B}};I(J)}}}}return t})})):[];return{convertedHeaders:u,convertedRows:o}},z=({table:l,unitConfig:i,convertBackToStorageUnit:r=!0,enableCosmeticRounding:s=!0,enableDisplayRounding:a=!0})=>{const{rows:m,headers:h,...U}=l,{storageUnits:u,preferredUnits:o}=ne(i),d=ee(o),[c,t]=v.useState(o),S=({unitKey:g,value:b})=>{t({...c,[g]:b});const e=i.find(f=>f.unitKey===g);e&&typeof e.onChange=="function"&&e.onChange({oldUnit:c[g],newUnit:b,unitKey:g})},p=g=>ae({headers:h,rows:m,selectedUnits:g,storageUnits:u,onChangeUnit:S,convertBackToStorageUnit:r,enableCosmeticRounding:s,enableDisplayRounding:a}),T=p(c),[D,j]=v.useState(T);return v.useEffect(()=>{!Z.isEqual(o,d)&&(Object.keys(o).forEach(b=>{const e=d==null?void 0:d[b],f=o[b];e!==f&&S({unitKey:b,value:f})}),j(p(o)))},[i]),v.useEffect(()=>{j(p(c))},[l,c]),n.jsx(te,{table:{...U,headers:D.convertedHeaders,rows:D.convertedRows}})};z.__docgenInfo={description:"",methods:[],displayName:"UnitTable",props:{table:{required:!0,tsType:{name:"IUnitTable"},description:""},unitConfig:{required:!0,tsType:{name:"Array",elements:[{name:"IUnitConfigItem"}],raw:"IUnitConfigItem[]"},description:""},convertBackToStorageUnit:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},enableCosmeticRounding:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},enableDisplayRounding:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}}},composes:["Omit"]};const ct={title:"Basic/UnitTable",args:{}},ie=!0,re=!0,oe=!0,le=!1,_="ft",M="C",se=3,ue=(l,i,r)=>{const s=[i,i,r],a=[...Array(l)].map((m,h)=>{const U=h,u=h+1.25,o=4+h*.25;return[String(U),String(u),String(o)]});return[s,...a]},de=ue(se,_,M),ce=({reduxTable:l,value:i,unit:r,rowIndex:s,cellIndex:a})=>Q(l,m=>{const h=m[0][a],U=(u,o)=>o===0;return m.forEach((u,o)=>{if(U(u,o)){u[a]=r;return}if(o===s+1){u[a]=String(i);return}const d=y.convertAndGetValue(u[a],r,h);u[a]=String(d)}),m}),pe=({reduxTable:l,value:i,rowIndex:r,cellIndex:s})=>Q(l,a=>{a[r+1][s]=i}),k=()=>{var g,b;const[l,i]=v.useState(_),[r,s]=v.useState(M),[a,m]=v.useState(de),[h,U]=v.useState(ie),[u,o]=v.useState(oe),[d,c]=v.useState(re),[t,S]=v.useState(le),[p,T]=v.useState(_),D=e=>{const{rowIndex:f,cellIndex:C,value:w,unit:x}=e.target,R=t?ce({reduxTable:a,value:w,unit:x,rowIndex:f,cellIndex:C}):pe({reduxTable:a,value:w,rowIndex:f,cellIndex:C});m(R)},j=a.reduce((e,f,C)=>(C===0?e.headers=[{cells:[{value:"From"},{value:"To"},{value:"Temperature"}]},{cells:[{type:"AutoUnit",unitKey:"length"},{type:"AutoUnit",unitKey:"length"},{type:"AutoUnit",unitKey:"temperature",testId:"table-unit-selector-3"}]}]:e.rows=e.rows.concat({cells:f.map((w,x)=>{const R=C===1&&x===1;return{value:w,type:R?"Text":"NumberInput",unitKey:x===2?"temperature":"length",onChange:D,roundDisplayValue:C===3&&x===2?I=>y.roundByMagnitude(I,2):null,formatDisplayValue:R?I=>`T* ${I}`:null,autoUnit:!0,testId:`testId_${C}_${x}`}})}),e),{testId:"testId",headers:[],rows:[]});return n.jsxs(X,{columns:"1fr 1fr",gap:!0,children:[n.jsxs(V,{heading:n.jsx(F,{children:"Settings"}),children:[n.jsx(L,{label:"Convert back to storage unit:",labelLeft:!0,labelWidth:200,children:n.jsx(W,{checked:h,onChange:e=>U(e.target.checked)})}),n.jsx(L,{label:"Enable display rounding:",labelLeft:!0,labelWidth:200,children:n.jsx(W,{checked:u,onChange:e=>o(e.target.checked)})}),n.jsx(L,{label:"Enable cosmetic rounding:",labelLeft:!0,labelWidth:200,children:n.jsx(W,{checked:d,onChange:e=>c(e.target.checked)})}),n.jsx(L,{label:"Convert whole table:",labelLeft:!0,labelWidth:200,children:n.jsx(W,{checked:t,onChange:e=>S(e.target.checked)})})]}),n.jsxs(V,{heading:n.jsx(F,{children:"Unit template"}),children:[n.jsx(L,{label:"Length unit:",labelLeft:!0,labelWidth:120,children:n.jsx(N,{options:(g=y.getUnitsForQuantity("length"))==null?void 0:g.map(e=>({value:e,label:y.label(e)})),value:{value:l},onChange:e=>i(e.target.value),width:"100px"})}),n.jsx(L,{label:"Temperature unit:",labelLeft:!0,labelWidth:120,children:n.jsx(N,{options:(b=y.getUnitsForQuantity("temperature"))==null?void 0:b.map(e=>({value:e,label:y.label(e)})),value:{value:r},onChange:e=>s(e.target.value),width:"100px"})})]}),n.jsx(V,{heading:n.jsx(F,{children:"Storage State (Redux)"}),children:n.jsx("pre",{children:n.jsx("code",{children:JSON.stringify(a,null,2)})})}),n.jsxs(V,{heading:n.jsx(F,{children:"UnitTable"}),children:[n.jsx(z,{table:j,unitConfig:[{unitKey:"length",storageUnit:a[0][0],preferredUnit:l,onChange:({newUnit:e})=>T(e)},{unitKey:"temperature",storageUnit:a[0][2],preferredUnit:r}],convertBackToStorageUnit:h,enableDisplayRounding:u,enableCosmeticRounding:d}),n.jsx(Y,{height:20}),n.jsx(L,{label:"Displayed length unit:",labelLeft:!0,labelWidth:150,children:p})]})]})};k.__docgenInfo={description:"",methods:[],displayName:"UnitTableExample"};var G,O,P,q,$;k.parameters={...k.parameters,docs:{...(G=k.parameters)==null?void 0:G.docs,source:{originalSource:`() => {
2
+ const [preferredLengthUnit, setPreferredLengthUnit] = useState(initialLengthUnit);
3
+ const [preferredTemperatureUnit, setPreferredTemperatureUnit] = useState(initialTemperatureUnit);
4
+ const [reduxTable, setReduxTable] = useState<TTable>(initialTable);
5
+ const [convertBackToStorageUnit, setConvertBackToStorageUnit] = useState(initialConvertBackToStorageUnit);
6
+ const [enableDisplayRounding, setEnableDisplayRounding] = useState(initialEnableDisplayRounding);
7
+ const [enableCosmeticRounding, setEnableCosmeticRounding] = useState(initialEnableCosmeticRounding);
8
+ const [convertWholeTable, setConvertWholeTable] = useState(initialConvertWholeTable);
9
+ const [displayedLengthUnit, setDisplayedLengthUnit] = useState(initialLengthUnit);
10
+
11
+ /*********************************************************************************************************************
12
+ Cell onChange handler
13
+ *********************************************************************************************************************/
14
+ const onUpdateCell = (evt: IUnitTableOnChangeEvent) => {
15
+ const {
16
+ rowIndex,
17
+ cellIndex,
18
+ value,
19
+ unit
20
+ } = evt.target;
21
+ const nextTable = convertWholeTable ? convertStorageTable({
22
+ reduxTable,
23
+ value,
24
+ unit,
25
+ rowIndex,
26
+ cellIndex
27
+ }) : updateCell({
28
+ reduxTable,
29
+ value,
30
+ rowIndex,
31
+ cellIndex
32
+ });
33
+ setReduxTable(nextTable);
34
+ };
35
+
36
+ /*********************************************************************************************************************
37
+ Construct table view data (same as old Table component, with a new props)
38
+ *********************************************************************************************************************/
39
+ const tableViewData = reduxTable.reduce((acc, row, rowIndex) => {
40
+ if (rowIndex === 0) {
41
+ acc.headers = [{
42
+ cells: [{
43
+ value: 'From'
44
+ }, {
45
+ value: 'To'
46
+ }, {
47
+ value: 'Temperature'
48
+ }]
49
+ }, {
50
+ cells: [{
51
+ type: 'AutoUnit',
52
+ unitKey: 'length'
53
+ }, {
54
+ type: 'AutoUnit',
55
+ unitKey: 'length'
56
+ }, {
57
+ type: 'AutoUnit',
58
+ unitKey: 'temperature',
59
+ testId: 'table-unit-selector-3'
60
+ }]
61
+ }];
62
+ } else {
63
+ acc.rows = acc.rows.concat({
64
+ cells: row.map((cell, cellIndex) => {
65
+ const specialCell = rowIndex === 1 && cellIndex === 1;
66
+ const type = specialCell ? 'Text' : 'NumberInput';
67
+ const formatDisplayValue = specialCell ? (value: number | string) => \`T* \${value}\` : null;
68
+ const customDisplayRounding = rowIndex === 3 && cellIndex === 2 ? (value: TStringNumberNull) => roundByMagnitude(value, 2) : null;
69
+ const value = cell;
70
+ return {
71
+ value,
72
+ type,
73
+ unitKey: cellIndex === 2 ? 'temperature' : 'length',
74
+ onChange: onUpdateCell,
75
+ roundDisplayValue: customDisplayRounding,
76
+ // optionally customize the display rounding of specific columns/cells
77
+ formatDisplayValue,
78
+ // optionally extend/customize the display formatting of specific columns/cells
79
+ autoUnit: true,
80
+ testId: \`testId_\${rowIndex}_\${cellIndex}\`
81
+ };
82
+ })
83
+ });
84
+ }
85
+ return acc;
86
+ }, {
87
+ testId: 'testId',
88
+ headers: ([] as any[]),
89
+ rows: ([] as IUnitTableRow[])
90
+ });
91
+ return <Grid columns="1fr 1fr" gap>
92
+ <Card heading={<Heading>Settings</Heading>}>
93
+ <Field label="Convert back to storage unit:" labelLeft labelWidth={200}>
94
+ <Toggle checked={convertBackToStorageUnit} onChange={evt => setConvertBackToStorageUnit(evt.target.checked)} />
95
+ </Field>
96
+ <Field label="Enable display rounding:" labelLeft labelWidth={200}>
97
+ <Toggle checked={enableDisplayRounding} onChange={evt => setEnableDisplayRounding(evt.target.checked)} />
98
+ </Field>
99
+ <Field label="Enable cosmetic rounding:" labelLeft labelWidth={200}>
100
+ <Toggle checked={enableCosmeticRounding} onChange={evt => setEnableCosmeticRounding(evt.target.checked)} />
101
+ </Field>
102
+ <Field label="Convert whole table:" labelLeft labelWidth={200}>
103
+ <Toggle checked={convertWholeTable} onChange={evt => setConvertWholeTable(evt.target.checked)} />
104
+ </Field>
105
+ </Card>
106
+ <Card heading={<Heading>Unit template</Heading>}>
107
+ <Field label="Length unit:" labelLeft labelWidth={120}>
108
+ <Select options={getUnitsForQuantity('length')?.map(unit => ({
109
+ value: unit,
110
+ label: label(unit)
111
+ }))} value={{
112
+ value: preferredLengthUnit
113
+ }} onChange={evt => setPreferredLengthUnit(evt.target.value)} width="100px" />
114
+ </Field>
115
+ <Field label="Temperature unit:" labelLeft labelWidth={120}>
116
+ <Select options={getUnitsForQuantity('temperature')?.map(unit => ({
117
+ value: unit,
118
+ label: label(unit)
119
+ }))} value={{
120
+ value: preferredTemperatureUnit
121
+ }} onChange={evt => setPreferredTemperatureUnit(evt.target.value)} width="100px" />
122
+ </Field>
123
+ </Card>
124
+ <Card heading={<Heading>Storage State (Redux)</Heading>}>
125
+ <pre>
126
+ <code>{JSON.stringify(reduxTable, null, 2)}</code>
127
+ </pre>
128
+ </Card>
129
+ <Card heading={<Heading>UnitTable</Heading>}>
130
+ <UnitTable table={tableViewData}
131
+ //New props:
132
+ unitConfig={[{
133
+ unitKey: 'length',
134
+ storageUnit: reduxTable[0][0],
135
+ preferredUnit: preferredLengthUnit,
136
+ onChange: ({
137
+ newUnit
138
+ }) => setDisplayedLengthUnit(newUnit)
139
+ }, {
140
+ unitKey: 'temperature',
141
+ storageUnit: reduxTable[0][2],
142
+ preferredUnit: preferredTemperatureUnit
143
+ }]}
144
+ //Most tables should just use the default values here (true):
145
+ convertBackToStorageUnit={convertBackToStorageUnit} enableDisplayRounding={enableDisplayRounding} enableCosmeticRounding={enableCosmeticRounding} />
146
+ <Spacer height={20} />
147
+ <Field label="Displayed length unit:" labelLeft labelWidth={150}>
148
+ {displayedLengthUnit}
149
+ </Field>
150
+ </Card>
151
+ </Grid>;
152
+ }`,...(P=(O=k.parameters)==null?void 0:O.docs)==null?void 0:P.source},description:{story:"Story",...($=(q=k.parameters)==null?void 0:q.docs)==null?void 0:$.description}}};const pt=["UnitTableExample"];export{k as UnitTableExample,pt as __namedExportsOrder,ct as default};
@@ -0,0 +1 @@
1
+ import{w as p,u as i,e as r,f as s,a as n}from"./index-DMAnyMX5.js";import{UnitTableExample as c}from"./unit-table.stories-DVqdGdEC.js";import"./index-CF7H4eMJ.js";import"./jsx-runtime-eps93zm2.js";import"./index-DhsZuJvc.js";import"./immer.esm-BwVl9PS2.js";import"./index-C0x1JmaP.js";import"./index-DRSy5Ssd.js";import"./grid-DRkC-bt8.js";import"./styled-components.browser.esm-BQ9GQzDc.js";import"./spacer-BWoNR27H.js";import"./card-EcjmryU9.js";import"./index-Bk2sglWO.js";import"./field-HrLaMLbx.js";import"./label-CqmyC9he.js";import"./common-types-Sih75Sav.js";import"./help-icon-Buhx5nl6.js";import"./tooltip-1V7clEnw.js";import"./index-CUZDtIZe.js";import"./icon-BSFY3vDO.js";import"./objectWithoutPropertiesLoose-CAYKN5F1.js";import"./inheritsLoose-DP0QEDDI.js";import"./index-CEuq6vkz.js";import"./disabled-context-rmpd7YJS.js";import"./heading-CRNoBc7q.js";import"./select-03uRbc4I.js";import"./lodash-c4VUpsOs.js";import"./types-Dx2TtIG9.js";import"./enum-Bnn40S8Q.js";import"./assertThisInitialized-B9jnkVVz.js";import"./memoize-one.esm-CcMeOnPo.js";import"./types-BmbYqTX_.js";import"./text-B3-TSWok.js";import"./actions-D-uVCDzk.js";import"./button-DHevvVBE.js";import"./spinner-AWUe4xwQ.js";import"./badge-CLQ59MDF.js";import"./select.input-CJed_LLR.js";import"./helpers-JJxzGegQ.js";import"./toggle-BbFVf61v.js";import"./use-previous-D775JrO6.js";import"./table-B5fM_vjN.js";import"./index.es-DazXb-ul.js";import"./redux-tRgGMjwY.js";import"./objectSpread2-DW4nTBoq.js";import"./tiny-invariant-DqLgxztJ.js";import"./pagination-DWc8zp3k.js";import"./input-DTXbDJaL.js";import"./input-group-BaRSJAEN.js";import"./input-group-addon-D68iUKV2.js";import"./number-input-CJJvhIIv.js";import"./check-box-DPLaOkRR.js";import"./slider-CNPYg8Sz.js";import"./index-BI4_Bp97.js";import"./popover-rq33c1W2.js";const ut={title:"Basic/UnitTable/Test Cases",args:{},tags:["!autodocs"]},w=c.bind({});w.play=async({canvasElement:o,step:e})=>{const a=p(o),m=p(o.ownerDocument.body);await e("Can enter decimal values",async()=>{const t=a.getByTestId("testId_2_1");await i.clear(t),await i.type(t,"123.123456789"),await i.click(o),await r(a.getByDisplayValue("123.12")).toBeInTheDocument()}),await e("Can enter comma decimals (converts to dot)",async()=>{const t=a.getByTestId("testId_2_1");await i.clear(t),await i.type(t,"123,456"),await i.click(o),await r(a.getByDisplayValue("123.46")).toBeInTheDocument()}),await e("Can enter small numbers",async()=>{const t=a.getByTestId("testId_2_1");await i.clear(t),await i.type(t,"0.0000000023"),await i.click(o),await r(t).toHaveDisplayValue("0.00")}),await e("Can enter large numbers",async()=>{const t=a.getByTestId("testId_2_1");await i.clear(t),await i.type(t,"999999999999"),await i.click(o),await r(a.getByDisplayValue("999999999999.00")).toBeInTheDocument()}),await e("Shows validation error for non-numeric input",async()=>{const t=a.getByTestId("testId_2_1");await i.clear(t),await i.type(t,"123x45s6"),await i.click(o),await r(a.getByDisplayValue("123x45s6")).toBeInTheDocument(),await s.mouseOver(t),await n(()=>{r(m.getByText("Must be a numerical value")).toBeInTheDocument()})})};const yt=["Test"];export{w as Test,yt as __namedExportsOrder,ut as default};
@@ -509,7 +509,7 @@
509
509
  }
510
510
  </script>
511
511
 
512
- <script type="module" crossorigin src="./assets/iframe-CLpyA5uB.js"></script>
512
+ <script type="module" crossorigin src="./assets/iframe-BPqD7cXD.js"></script>
513
513
  </head>
514
514
 
515
515
  <body>