From b5c9bf0099a61477508e5f7244ecd8f2397ec836 Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Thu, 31 Dec 2020 09:22:37 +0100 Subject: [PATCH] Option to highlight the current board / layer --- TODO.md | 8 +--- docs/css/app.1164dda2.css | 1 - docs/css/app.2653d42c.css | 1 + docs/index.html | 2 +- docs/js/app.62fd703d.js | 2 + docs/js/app.62fd703d.js.map | 1 + docs/js/app.a1173833.js | 2 - docs/js/app.a1173833.js.map | 1 - src/App.vue | 19 +++++++++ src/components/EndGrainPreview.vue | 26 ++++++++++-- src/components/Layers.vue | 67 ++++++++++++++++++++++++++---- src/store.js | 40 ++++++++++++++++-- 12 files changed, 144 insertions(+), 26 deletions(-) delete mode 100644 docs/css/app.1164dda2.css create mode 100644 docs/css/app.2653d42c.css create mode 100644 docs/js/app.62fd703d.js create mode 100644 docs/js/app.62fd703d.js.map delete mode 100644 docs/js/app.a1173833.js delete mode 100644 docs/js/app.a1173833.js.map diff --git a/TODO.md b/TODO.md index 3eb90c2..5fe7603 100644 --- a/TODO.md +++ b/TODO.md @@ -1,14 +1,9 @@ ToDo ==== -Bugs ----- -- Double scrollbar, all the way (sidebar needs it's own scrollbar) - Should have ---- -- Automatically switch to Custom direction when clicking a strip (preserving the directions currently on screen otherwise) -- Highlight strips for the current board, highlight layer for the focused/hovered layer +- Automatically switch to Custom direction when clicking a strip (preserving the directions currently on screen otherwise)? - Show list of end grain board numbers and reversed in a "Glue list" for printing - Support for fractional inches (see, not all europeans look down on freedom units!) - Reset to default @@ -19,6 +14,5 @@ Nice to have - Show remaining material - Theme selection for the preview background - Render width and height of the boards in the previews (simplified version implemented, moved to Nice to have) -- Support for mixing multiple boards in the end grain version - 3D effect for previews emulating thickness / crosscut width - Actual wood textures \ No newline at end of file diff --git a/docs/css/app.1164dda2.css b/docs/css/app.1164dda2.css deleted file mode 100644 index ed63874..0000000 --- a/docs/css/app.1164dda2.css +++ /dev/null @@ -1 +0,0 @@ -.settings[data-v-7067c7c7]{display:inline-grid;grid-template-columns:auto auto;grid-column-gap:1em;grid-row-gap:.25em}.settings h2[data-v-7067c7c7]{margin-top:1em;margin-bottom:.25em;grid-column:1/3}.layers[data-v-01187e40]{display:grid;grid-template-columns:-webkit-min-content auto 5em -webkit-min-content;grid-template-columns:min-content auto 5em min-content;grid-column-gap:1em}.layers .hint[data-v-01187e40]{color:grey;text-align:center;grid-column:1/5;margin-bottom:1em}.layers .index[data-v-01187e40]{cursor:-webkit-grab;cursor:grab}.layers .index.dropTargetAbove[data-v-01187e40]{border-top:1px solid #fff;cursor:-webkit-grabbing;cursor:grabbing}.layers .index.dropTargetBelow[data-v-01187e40]{border-bottom:1px solid #fff;cursor:-webkit-grabbing;cursor:grabbing}.layers .add[data-v-01187e40]{grid-column:2/5;padding-top:1em}.layers .widthwarning[data-v-01187e40]{font-size:80%;color:#ff0;grid-column:2/5;padding-top:.5em}.layers .header[data-v-01187e40]{font-weight:700;margin-bottom:.25em}.board[data-v-01187e40]{display:flex;margin-bottom:2em}.board .name[data-v-01187e40]{flex-grow:1;padding:.5em}.boardsettings[data-v-01187e40]{display:inline-grid;grid-template-columns:-webkit-max-content 5em;grid-template-columns:max-content 5em;grid-column-gap:1em;margin-bottom:2em}h2[data-v-01187e40]{margin-top:2em}.wood[data-v-15338ab0]{display:grid;grid-template-columns:auto -webkit-min-content -webkit-min-content;grid-template-columns:auto min-content min-content;grid-column-gap:1em}.wood .add[data-v-15338ab0]{grid-column:1/4;padding-top:1em}.wood .header[data-v-15338ab0]{font-weight:700;margin-bottom:.25em}.wood button[data-v-15338ab0]{height:100%}.dimensions[data-v-61e0967d]{margin-bottom:.5em}.draghint[data-v-61e0967d]{margin-bottom:2em}svg[data-v-61e0967d]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen{svg[data-v-61e0967d]{box-shadow:0 0 3em #000}}@media print{svg[data-v-61e0967d]{max-width:100%}}svg.dragging[data-v-61e0967d]{cursor:-webkit-grabbing;cursor:grabbing}.dimensions[data-v-a5fd011a]{margin-bottom:.5em}@media screen{svg[data-v-a5fd011a]{box-shadow:0 0 3em #000}}@media print{svg[data-v-a5fd011a]{max-width:100%}}h2[data-v-30665a8d]{font-size:110%}.list[data-v-30665a8d]{border-collapse:collapse;margin-top:1em;margin-bottom:3em}.list td[data-v-30665a8d],.list th[data-v-30665a8d]{padding:.25em;padding-left:1em;padding-right:1em}.list .dimension[data-v-30665a8d]{text-align:right}.list tr.board td[data-v-30665a8d]{font-style:italic}.list tr:nth-child(2n):not(.board) td[data-v-30665a8d]{background-color:#555}@media print{.list tr:nth-child(2n):not(.board) td[data-v-30665a8d]{background-color:#f0f0f0}}body,html{background-color:#444;color:#fff;margin:0;padding:0;width:100%;height:100%;overflow:none}@media print{body,html{background-color:#fff;color:#000;overflow:visible}}#app{font-family:Verdana,Arial,sans-serif;font-size:10pt;display:flex;flex-direction:horizontal;width:100%;height:100%}h2{color:grey;font-size:80%}a{color:#9cf}input,select{background-color:#303030;color:#fff;border:1px solid #606060;padding-top:.3em;padding-bottom:.3em}input:focus,select:focus{outline:1px solid grey}input[type=number]{text-align:right}button{background-color:#404040;color:#fff;border:1px solid #606060;padding-top:.3em;padding-bottom:.3em}button:hover:not([disabled]){background-color:grey}@media print{.hideOnPrint{display:none}}.sidebar[data-v-5bc914fd]{background-color:#383838;color:#fff;width:35em;flex-shrink:0;box-shadow:0 0 3em #101010}.sidebar .toolbar[data-v-5bc914fd]{background-color:#333;box-shadow:-.2em 0 .5em #000;margin-bottom:.5em}.sidebar .toolbar a[data-v-5bc914fd]{color:#fff;display:inline-block;padding:.5em;padding-left:1em;padding-right:1em;cursor:pointer}.sidebar .toolbar a.active[data-v-5bc914fd]{background-color:#06c}.sidebar .toolbar a[data-v-5bc914fd]:hover:not(.active){background-color:#004d99}.sidebar .toolbar a>svg[data-v-5bc914fd]{display:block;margin-left:auto;margin-right:auto}.sidebar .tab[data-v-5bc914fd]{padding:1em}.settings[data-v-5bc914fd]{margin-right:1em}.settings .block[data-v-5bc914fd]{margin-bottom:2em}.content[data-v-5bc914fd]{flex-grow:1;padding:2em;padding-left:3em;overflow:auto}@media print{.content[data-v-5bc914fd]{background-color:#fff;color:#000;overflow:visible}}.content h1[data-v-5bc914fd]{margin-top:0;margin-bottom:0;font-size:150%}.content .preview[data-v-5bc914fd]{margin-bottom:2em}.about[data-v-5bc914fd],.loadSave[data-v-5bc914fd]{width:30em} \ No newline at end of file diff --git a/docs/css/app.2653d42c.css b/docs/css/app.2653d42c.css new file mode 100644 index 0000000..dc17f3d --- /dev/null +++ b/docs/css/app.2653d42c.css @@ -0,0 +1 @@ +.settings[data-v-7067c7c7]{display:inline-grid;grid-template-columns:auto auto;grid-column-gap:1em;grid-row-gap:.25em}.settings h2[data-v-7067c7c7]{margin-top:1em;margin-bottom:.25em;grid-column:1/3}.layers[data-v-342492d6]{display:grid;grid-template-columns:-webkit-min-content auto 5em -webkit-min-content;grid-template-columns:min-content auto 5em min-content;grid-column-gap:1em}.layers .hint[data-v-342492d6]{color:grey;text-align:center;grid-column:1/5;margin-bottom:1em}.layers .index[data-v-342492d6]{cursor:-webkit-grab;cursor:grab}.layers .index.dropTargetAbove[data-v-342492d6]{border-top:1px solid #fff;cursor:-webkit-grabbing;cursor:grabbing}.layers .index.dropTargetBelow[data-v-342492d6]{border-bottom:1px solid #fff;cursor:-webkit-grabbing;cursor:grabbing}.layers .add[data-v-342492d6]{grid-column:2/5;padding-top:1em}.layers .widthwarning[data-v-342492d6]{font-size:80%;color:#ff0;grid-column:2/5;padding-top:.5em}.layers .header[data-v-342492d6]{font-weight:700;margin-bottom:.25em}.board[data-v-342492d6]{display:flex;margin-bottom:2em}.board .name[data-v-342492d6]{flex-grow:1;padding:.5em}.boardsettings[data-v-342492d6]{display:inline-grid;grid-template-columns:-webkit-max-content 5em;grid-template-columns:max-content 5em;grid-column-gap:1em;margin-bottom:2em}h2[data-v-342492d6]{margin-top:2em}.wood[data-v-15338ab0]{display:grid;grid-template-columns:auto -webkit-min-content -webkit-min-content;grid-template-columns:auto min-content min-content;grid-column-gap:1em}.wood .add[data-v-15338ab0]{grid-column:1/4;padding-top:1em}.wood .header[data-v-15338ab0]{font-weight:700;margin-bottom:.25em}.wood button[data-v-15338ab0]{height:100%}.dimensions[data-v-a8f1d07c]{margin-bottom:.5em}.draghint[data-v-a8f1d07c]{margin-bottom:2em}svg[data-v-a8f1d07c]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen{svg[data-v-a8f1d07c]{box-shadow:0 0 3em #000}}@media print{svg[data-v-a8f1d07c]{max-width:100%}}svg.dragging[data-v-a8f1d07c]{cursor:-webkit-grabbing;cursor:grabbing}svg.highlightBoard .boardLayer[data-v-a8f1d07c]:not(.highlightedBoard),svg.highlightLayer .layer[data-v-a8f1d07c]:not(.highlightedLayer){opacity:.5}.dimensions[data-v-a5fd011a]{margin-bottom:.5em}@media screen{svg[data-v-a5fd011a]{box-shadow:0 0 3em #000}}@media print{svg[data-v-a5fd011a]{max-width:100%}}h2[data-v-30665a8d]{font-size:110%}.list[data-v-30665a8d]{border-collapse:collapse;margin-top:1em;margin-bottom:3em}.list td[data-v-30665a8d],.list th[data-v-30665a8d]{padding:.25em;padding-left:1em;padding-right:1em}.list .dimension[data-v-30665a8d]{text-align:right}.list tr.board td[data-v-30665a8d]{font-style:italic}.list tr:nth-child(2n):not(.board) td[data-v-30665a8d]{background-color:#555}@media print{.list tr:nth-child(2n):not(.board) td[data-v-30665a8d]{background-color:#f0f0f0}}body,html{background-color:#444;color:#fff;margin:0;padding:0;width:100%;height:100%;overflow:none}@media print{body,html{background-color:#fff;color:#000;overflow:visible}}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb{background-color:#606060}#app{font-family:Verdana,Arial,sans-serif;font-size:10pt;display:flex;flex-direction:horizontal;width:100%;height:100%}h2{color:grey;font-size:80%}a{color:#9cf}input,select{background-color:#303030;color:#fff;border:1px solid #606060;padding-top:.3em;padding-bottom:.3em}input:focus,select:focus{outline:1px solid grey}input[type=number]{text-align:right}button{background-color:#404040;color:#fff;border:1px solid #606060;padding-top:.3em;padding-bottom:.3em}button:hover:not([disabled]){background-color:grey}@media print{.hideOnPrint{display:none}}.sidebar[data-v-0a5c6a00]{background-color:#383838;color:#fff;width:35em;flex-shrink:0;box-shadow:0 0 3em #101010;display:flex;flex-direction:column}.sidebar .toolbar[data-v-0a5c6a00]{background-color:#333;box-shadow:-.2em 0 .5em #000;margin-bottom:.5em}.sidebar .toolbar a[data-v-0a5c6a00]{color:#fff;display:inline-block;padding:.5em;padding-left:1em;padding-right:1em;cursor:pointer}.sidebar .toolbar a.active[data-v-0a5c6a00]{background-color:#06c}.sidebar .toolbar a[data-v-0a5c6a00]:hover:not(.active){background-color:#004d99}.sidebar .toolbar a>svg[data-v-0a5c6a00]{display:block;margin-left:auto;margin-right:auto}.sidebar .tabs[data-v-0a5c6a00]{overflow:auto}.sidebar .tab[data-v-0a5c6a00]{padding:1em}.settings[data-v-0a5c6a00]{margin-right:1em}.settings .block[data-v-0a5c6a00]{margin-bottom:2em}.content[data-v-0a5c6a00]{flex-grow:1;padding:2em;padding-left:3em;overflow:auto}@media print{.content[data-v-0a5c6a00]{background-color:#fff;color:#000;overflow:visible}}.content h1[data-v-0a5c6a00]{margin-top:0;margin-bottom:0;font-size:150%}.content .preview[data-v-0a5c6a00]{margin-bottom:2em}.about[data-v-0a5c6a00],.loadSave[data-v-0a5c6a00]{width:30em} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 8a30084..7b0924c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -CuttingBoard
\ No newline at end of file +CuttingBoard
\ No newline at end of file diff --git a/docs/js/app.62fd703d.js b/docs/js/app.62fd703d.js new file mode 100644 index 0000000..d7bfe06 --- /dev/null +++ b/docs/js/app.62fd703d.js @@ -0,0 +1,2 @@ +(function(t){function e(e){for(var n,a,s=e[0],c=e[1],d=e[2],u=0,h=[];u1?(Object(n["k"])(),Object(n["c"])("h2",E,"Board "+Object(n["q"])(e+1),1)):Object(n["d"])("",!0),Object(n["g"])(U,{board:t,scale:1},null,8,["board"])],64)})),256))],2),Object(n["g"])("div",{class:{hideOnPrint:!M.printCuttingList}},[I,Object(n["g"])(V)],2)])],64)})),T=(r("b0c0"),r("8a79"),Object(n["y"])("data-v-7067c7c7"));Object(n["m"])("data-v-7067c7c7");var H={class:"settings"},S=Object(n["g"])("h2",null,"Designer",-1),D=Object(n["g"])("label",{for:"units"},"Units",-1),A=Object(n["g"])("option",{value:"mm"},"Millimeters",-1),q=Object(n["g"])("option",{value:"cm"},"Centimeters",-1),U=Object(n["g"])("option",{value:"inchdecimal"},"Inches (decimal)",-1),V=Object(n["g"])("h2",null,"Tools",-1),_=Object(n["g"])("label",{for:"bladeKerf"},"Blade kerf",-1),F=Object(n["g"])("h2",null,"End grain",-1),K=Object(n["g"])("label",{for:"crosscutWidth"},"Crosscut width",-1);Object(n["l"])();var R=T((function(t,e,r,i,o,a){return Object(n["k"])(),Object(n["c"])("div",H,[S,D,Object(n["g"])("select",{id:"units",value:a.settings.units,onChange:e[1]||(e[1]=function(e){return t.$store.commit("updateSettings",{units:e.target.value})})},[A,q,U],40,["value"]),V,_,Object(n["g"])("input",{id:"bladeKerf",type:"number",value:a.settings.bladeKerf,onChange:e[2]||(e[2]=function(e){return t.$store.commit("updateSettings",{bladeKerf:a.parseFloatDef(e.target.value)})})},null,40,["value"]),F,K,Object(n["g"])("input",{id:"crosscutWidth",type:"number",value:a.settings.crosscutWidth,onChange:e[3]||(e[3]=function(e){return t.$store.commit("updateSettings",{crosscutWidth:a.parseFloatDef(e.target.value)})})},null,40,["value"])])})),N=(r("2b19"),25.4),z=10,X=1,Y={convert:function(t,e,r){var n=this.toMillimeters(t,e);return this.fromMillimeters(n,r)},toPixels:function(t,e){return Math.ceil(this.toMillimeters(t,e)*X)},toMillimeters:function(t,e){switch(e){case"mm":return t;case"cm":return t*z;case"inchdecimal":return t*N}return console.error("Invalid units type: "+e),0},fromMillimeters:function(t,e){switch(e){case"mm":return t;case"cm":return t/z;case"inchdecimal":return t/N}return console.error("Invalid units type: "+e),0},display:function(t,e){var r=this.limitDecimals(t,3);switch(e){case"mm":return r+" mm";case"cm":return r+" cm";case"inchdecimal":return r+" inch"}return console.error("Invalid units type: "+e),r},limitDecimals:function(t,e){var r=Math.pow(10,e);return Math.round(t*r)/r}},J={computed:{settings:function(){return this.$store.state.settings}},methods:{parseFloatDef:function(t){var e=parseFloat(t);return Object.is(e,NaN)?0:e}}};r("e9ae");J.render=R,J.__scopeId="data-v-7067c7c7";var Q=J,Z=Object(n["y"])("data-v-342492d6");Object(n["m"])("data-v-342492d6");var tt={class:"name"},et={class:"boardsettings"},rt=Object(n["g"])("label",{for:"boardLength"},"Board length",-1),nt=Object(n["g"])("label",{for:"boardThickness"},"Board thickness",-1),it={class:"layers"},ot=Object(n["e"])('
Tip: click and drag the layer number to move a layer
 Wood speciesWidth ',5),at={key:0,class:"widthwarning"},st={class:"add"},ct=Object(n["g"])("h2",null,"Preview settings",-1),dt=Object(n["g"])("label",{for:"borders"}," Show borders",-1),lt=Object(n["g"])("label",{for:"highlightBoard"}," Highlight current board in end grain preview",-1),ut=Object(n["g"])("label",{for:"highlightLayer"}," Highlight current layer in end grain preview",-1),ht=Object(n["g"])("h2",null,"End grain layer direction",-1),gt=Object(n["g"])("label",{for:"directionUniform"}," Uniform",-1),bt=Object(n["g"])("label",{for:"directionAlternate"}," Alternate",-1),ft=Object(n["g"])("label",{for:"directionCustom"}," Custom",-1),pt={key:0},Ot=Object(n["f"])(" Click the strips in the preview to reverse their direction. "),vt={key:0},mt=Object(n["f"])("This may be easier if you "),jt=Object(n["f"])(" the 'Show borders' setting.");Object(n["l"])();var yt=Z((function(t,e,r,i,o,a){return Object(n["k"])(),Object(n["c"])(n["a"],null,[Object(n["g"])("div",{class:"board",onMouseenter:e[5]||(e[5]=function(){return a.highlightBoard&&a.highlightBoard.apply(a,arguments)}),onMouseleave:e[6]||(e[6]=function(){return a.removeHighlightBoard&&a.removeHighlightBoard.apply(a,arguments)})},[Object(n["g"])("button",{onClick:e[1]||(e[1]=function(){return a.previousBoard&&a.previousBoard.apply(a,arguments)}),disabled:0==o.boardIndex},"<",8,["disabled"]),Object(n["g"])("div",tt,"Board "+Object(n["q"])(o.boardIndex+1)+" of "+Object(n["q"])(a.boards.length),1),a.boards.length>1?(Object(n["k"])(),Object(n["c"])("button",{key:0,onClick:e[2]||(e[2]=function(){return a.removeBoard&&a.removeBoard.apply(a,arguments)})},"Remove")):Object(n["d"])("",!0),Object(n["g"])("button",{onClick:e[3]||(e[3]=function(){return a.addBoard&&a.addBoard.apply(a,arguments)})},"Add"),Object(n["g"])("button",{onClick:e[4]||(e[4]=function(){return a.nextBoard&&a.nextBoard.apply(a,arguments)}),disabled:o.boardIndex==a.boards.length-1},">",8,["disabled"])],32),null!==a.currentBoard?(Object(n["k"])(),Object(n["c"])(n["a"],{key:0},[Object(n["g"])("div",et,[rt,Object(n["g"])("input",{id:"boardLength",type:"number",value:a.currentBoard.length,onChange:e[7]||(e[7]=function(e){return t.$store.commit("updateBoard",{board:o.boardIndex,values:{length:a.parseFloatDef(e.target.value)}})})},null,40,["value"]),nt,Object(n["g"])("input",{id:"boardThickness",type:"number",value:a.currentBoard.thickness,onChange:e[8]||(e[8]=function(e){return t.$store.commit("updateBoard",{board:o.boardIndex,values:{thickness:a.parseFloatDef(e.target.value)}})})},null,40,["value"])]),Object(n["g"])("div",it,[ot,(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(a.currentBoard.layers,(function(t,e){return Object(n["k"])(),Object(n["c"])(n["a"],null,[Object(n["g"])("div",{class:["index",{dropTargetAbove:o.dropTarget===e,dropTargetBelow:o.dropTarget===a.currentBoard.layers.length&&e===a.currentBoard.layers.length-1}],ref:"layer"+e,onMousedown:Object(n["x"])((function(t){return a.startDrag(e)}),["prevent"]),onMouseenter:function(t){return a.highlightLayer(e)},onMouseleave:function(t){return a.removeHighlightLayer(e)}},Object(n["q"])(e+1),43,["onMousedown","onMouseenter","onMouseleave"]),Object(n["w"])(Object(n["g"])("select",{"onUpdate:modelValue":function(e){return t.wood=e},class:"wood",onMouseenter:function(t){return a.highlightLayer(e)},onMouseleave:function(t){return a.removeHighlightLayer(e)}},[(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(a.wood,(function(t,e){return Object(n["k"])(),Object(n["c"])("option",{value:e},Object(n["q"])(t.name),9,["value"])})),256))],40,["onUpdate:modelValue","onMouseenter","onMouseleave"]),[[n["s"],t.wood]]),Object(n["g"])("input",{type:"number",class:"width",value:t.width,onInput:function(e){return t.width=a.parseFloatDef(e.target.value)},onMouseenter:function(t){return a.highlightLayer(e)},onMouseleave:function(t){return a.removeHighlightLayer(e)}},null,40,["value","onInput","onMouseenter","onMouseleave"]),Object(n["g"])("div",{class:"remove",onMouseenter:function(t){return a.highlightLayer(e)},onMouseleave:function(t){return a.removeHighlightLayer(e)}},[Object(n["g"])("button",{onClick:function(t){return a.removeLayer(e)}},"X",8,["onClick"])],40,["onMouseenter","onMouseleave"])],64)})),256)),null!==a.widthWarning?(Object(n["k"])(),Object(n["c"])("div",at,Object(n["q"])(a.widthWarning),1)):Object(n["d"])("",!0),Object(n["g"])("div",st,[Object(n["g"])("button",{onClick:e[9]||(e[9]=function(t){return a.addLayer()})},"Add layer")])]),Object(n["g"])("div",null,[ct,Object(n["g"])("div",null,[Object(n["g"])("input",{id:"borders",type:"checkbox",checked:a.settings.borders,onChange:e[10]||(e[10]=function(e){return t.$store.commit("updateSettings",{borders:e.target.checked})})},null,40,["checked"]),dt]),Object(n["g"])("div",null,[Object(n["g"])("input",{id:"highlightBoard",type:"checkbox",checked:a.settings.highlightBoard,onChange:e[11]||(e[11]=function(e){return t.$store.commit("updateSettings",{highlightBoard:e.target.checked})})},null,40,["checked"]),lt]),Object(n["g"])("div",null,[Object(n["g"])("input",{id:"highlightLayer",type:"checkbox",checked:a.settings.highlightLayer,onChange:e[12]||(e[12]=function(e){return t.$store.commit("updateSettings",{highlightLayer:e.target.checked})})},null,40,["checked"]),ut])]),Object(n["g"])("div",null,[ht,Object(n["g"])("div",null,[Object(n["g"])("input",{id:"directionUniform",type:"radio",checked:"uniform"===a.settings.direction,onChange:e[13]||(e[13]=function(t){return a.setDirection(t,"uniform")})},null,40,["checked"]),gt]),Object(n["g"])("div",null,[Object(n["g"])("input",{id:"directionAlternate",type:"radio",checked:"alternate"===a.settings.direction,onChange:e[14]||(e[14]=function(t){return a.setDirection(t,"alternate")})},null,40,["checked"]),bt]),Object(n["g"])("div",null,[Object(n["g"])("input",{id:"directionCustom",type:"radio",checked:"custom"===a.settings.direction,onChange:e[15]||(e[15]=function(t){return a.setDirection(t,"custom")})},null,40,["checked"]),ft,"custom"===a.settings.direction?(Object(n["k"])(),Object(n["c"])("p",pt,[Ot,a.settings.borders?Object(n["d"])("",!0):(Object(n["k"])(),Object(n["c"])("span",vt,[mt,Object(n["g"])("a",{href:"#",onClick:e[16]||(e[16]=Object(n["x"])((function(e){return t.$store.commit("updateSettings",{borders:!0})}),["prevent"]))},"turn on"),jt]))])):Object(n["d"])("",!0)])])],64)):Object(n["d"])("",!0)],64)})),wt=(r("4160"),r("d81d"),r("13d5"),r("159b"),{data:function(){return{boardIndex:0,dragIndex:null,dropTarget:null,updateHighlightedBoard:!1}},computed:{volatile:function(){return this.$store.state.volatile},settings:function(){return this.$store.state.settings},wood:function(){return this.$store.state.wood},boards:function(){return this.$store.state.boards},currentBoard:function(){return this.boardIndex>=0&&this.boardIndexn)&&(n=a)})),e==n)return null;var i="Your board are not of equal width. The current board is "+Y.display(r,this.settings.units)+" ";return i+=rt?e:t}),0)}},methods:{parseFloatDef:function(t){var e=parseFloat(t);return Object.is(e,NaN)?0:e},previousBoard:function(){this.boardIndex>0&&this.boardIndex--},nextBoard:function(){this.boardIndex=this.boards.length&&(this.boardIndex=this.boards.length-1))},addLayer:function(){this.$store.commit("addLayer",this.boardIndex)},removeLayer:function(t){this.$store.commit("removeLayer",{board:this.boardIndex,layer:t})},startDrag:function(t){var e=this,r=this;r.dragIndex=t,r.dropTarget=t;var n,i=function(t){r.dropTarget=r.getTargetLayer(t.pageY)};n=function(){document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",n),r.dragIndex!==r.dropTarget&&r.$store.commit("moveLayer",{board:e.boardIndex,from:r.dragIndex,to:r.dropTarget}),r.dropTarget=null,r.dragIndex=null},document.addEventListener("mousemove",i),document.addEventListener("mouseup",n)},getTargetLayer:function(t){if(null===this.currentBoard||0==this.currentBoard.layers.length)return null;var e=this.getPageOffsetRect(this.$refs.layer0),r=this.getPageOffsetRect(this.$refs["layer"+(this.currentBoard.layers.length-1)]);if(t<=e.bottom)return 0;if(t>=r.bottom)return this.currentBoard.layers.length;if(t>=r.top)return this.currentBoard.layers.length-1;if(null!==this.dropTarget&&this.dropTarget>0&&this.dropTarget=n.top&&t=o.top&&t1?(Object(n["k"])(),Object(n["c"])("div",St,"Click and drag strips to reorder them. Click once to reverse the direction.")):Object(n["d"])("",!0),(Object(n["k"])(),Object(n["c"])("svg",{width:a.viewportWidth,height:a.viewportHeight,viewBox:a.viewBox,class:{dragging:null!==o.dropTarget,highlightBoard:a.settings.highlightBoard&&null!==a.volatile.highlightedBoard,highlightLayer:a.settings.highlightLayer&&null!==a.volatile.highlightedBoard&&null!==a.volatile.highlightedLayer}},[Object(n["g"])("defs",null,[(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(a.boards,(function(t,e){return Object(n["k"])(),Object(n["c"])("g",{id:"strip"+e,class:["boardLayer",{highlightedBoard:e===a.volatile.highlightedBoard}]},[(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(t.layers,(function(r,i){return Object(n["k"])(),Object(n["c"])("rect",{width:a.toPixels(t.thickness),height:a.toPixels(r.width),x:"0",y:a.getBoardLayerOffset(t,i),style:a.getBoardLayerStyle(t,i),class:["layer",{highlightedLayer:e===a.volatile.highlightedBoard&&i==a.volatile.highlightedLayer}]},null,14,["width","height","y"])})),256))],10,["id"])})),256)),Object(n["g"])("g",Dt,[Object(n["g"])("line",{x1:"0",y1:"0",x2:"0",y2:a.boardPixelHeight,style:{stroke:"white","stroke-width":"2"}},null,8,["y2"])])]),(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(a.endGrain,(function(t,e){return Object(n["k"])(),Object(n["c"])("use",{ref:"strip"+e,href:"#strip"+t.board,x:a.getLayerOffset(e),y:"0",transform:a.getLayerTransform(e),onMousedown:Object(n["x"])((function(t){return a.mouseDown(e,t)}),["prevent"])},null,40,["href","x","transform","onMousedown"])})),256)),null!==o.dropTarget?(Object(n["k"])(),Object(n["c"])("use",{key:0,href:"#dropTarget",x:a.getLayerOffset(o.dropTarget)},null,8,["x"])):Object(n["d"])("",!0)],10,["width","height","viewBox"]))])})),qt=(r("a9e3"),{props:{scale:Number},data:function(){return{dragIndex:null,dropTarget:null}},computed:{volatile:function(){return this.$store.state.volatile},settings:function(){return this.$store.state.settings},boards:function(){return this.$store.state.boards},wood:function(){return this.$store.state.wood},endGrain:function(){return this.$store.state.endGrain},boardWidth:function(){var t=this;return this.endGrain.map((function(e){return e.board>=0&&e.boardt?e:t}),0)},boardPixelWidth:function(){return this.toPixels(this.boardWidth)},boardPixelHeight:function(){return this.toPixels(this.boardHeight)},viewportWidth:function(){return Math.floor(this.boardPixelWidth*this.scale)},viewportHeight:function(){return Math.floor(this.boardPixelHeight*this.scale)},viewBox:function(){return"0 0 "+this.boardPixelWidth+" "+this.boardPixelHeight}},methods:{toPixels:function(t){return Y.toPixels(t,this.settings.units)},display:function(t){return Y.display(t,this.settings.units)},getBoardLayerOffset:function(t,e){if(e<0||e>=t.layers.length)return 0;for(var r=0,n=0;n=t.layers.length)return"fill: fuchsia";var r=t.layers[e].wood;if(r<0||r>=this.wood.length)return"";var n=this.settings.borders?"; stroke-width: 1; stroke: black":"";return"fill: "+this.wood[r].color+n},getLayerOffset:function(t){if(t<0||t>this.endGrain.length)return 0;for(var e=0,r=0;r=0&&n=0&&t=this.endGrain.length||(this.endGrain[t].reversed=!this.endGrain[t].reversed))},mouseDown:function(t,e){var r,n=this,i=e.pageX,o=!1,a=function(e){o||Math.abs(e.pageX-i)>=5&&(n.dragIndex=t,o=!0),o&&(n.dropTarget=n.getTargetStrip(e.pageX))};r=function(){document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",r),o?(n.dragIndex!==n.dropTarget&&n.$store.commit("moveEndgrain",{from:n.dragIndex,to:n.dropTarget}),n.dropTarget=null,n.dragIndex=null):n.reverseLayer(t)},document.addEventListener("mousemove",a),document.addEventListener("mouseup",r)},getTargetStrip:function(t){if(0==this.endGrain.length)return null;var e=this.getPageOffsetRect(this.$refs.strip0),r=this.getPageOffsetRect(this.$refs["strip"+(this.endGrain.length-1)]);if(t<=e.right)return 0;if(t>=r.right)return this.endGrain.length;if(t>=r.left)return this.endGrain.length-1;if(null!==this.dropTarget&&this.dropTarget>0&&this.dropTarget=n.left&&t=o.left&&t=this.layers.length)return 0;for(var e=0,r=0;r=this.layers.length)return"fill: fuchsia";var e=this.layers[t].wood;if(e<0||e>=this.wood.length)return"";var r=this.settings.borders?"; stroke-width: 1; stroke: black":"";return"fill: "+this.wood[e].color+r}}};r("6dfb");Rt.render=Kt,Rt.__scopeId="data-v-a5fd011a";var Nt=Rt,zt=Object(n["y"])("data-v-30665a8d");Object(n["m"])("data-v-30665a8d");var Xt={class:"list"},Yt=Object(n["g"])("tr",null,[Object(n["g"])("th",null,"Layer"),Object(n["g"])("th",null,"Wood species"),Object(n["g"])("th",{class:"dimension"},"Width")],-1),Jt={key:0,class:"board"},Qt={colspan:"3"},Zt={class:"dimension"},te=Object(n["g"])("h2",null,"Bill of materials",-1),ee={class:"list"},re=Object(n["g"])("tr",null,[Object(n["g"])("th",null,"Wood species"),Object(n["g"])("th",{class:"dimension"},"Length"),Object(n["g"])("th",{class:"dimension"},"Width"),Object(n["g"])("th",{class:"dimension"},"Thickness")],-1),ne={key:0,class:"board"},ie={colspan:"3"},oe={class:"dimension"},ae={class:"dimension"},se={class:"dimension"};Object(n["l"])();var ce=zt((function(t,e,r,i,o,a){return Object(n["k"])(),Object(n["c"])(n["a"],null,[Object(n["g"])("table",Xt,[Yt,(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(a.boards,(function(t,e){return Object(n["k"])(),Object(n["c"])(n["a"],null,[a.boards.length>1?(Object(n["k"])(),Object(n["c"])("tr",Jt,[Object(n["g"])("td",Qt,"Board "+Object(n["q"])(e+1),1)])):Object(n["d"])("",!0),(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(t.layers,(function(e,r){return Object(n["k"])(),Object(n["c"])("tr",null,[Object(n["g"])("td",null,Object(n["q"])(r+1),1),Object(n["g"])("td",null,Object(n["q"])(a.getLayerWood(t,r)),1),Object(n["g"])("td",Zt,Object(n["q"])(a.getLayerWidth(t,r)),1)])})),256))],64)})),256))]),te,Object(n["g"])("table",ee,[re,(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(a.bom,(function(t,e){return Object(n["k"])(),Object(n["c"])(n["a"],null,[a.bom.length>1?(Object(n["k"])(),Object(n["c"])("tr",ne,[Object(n["g"])("td",ie,"Board "+Object(n["q"])(e+1),1)])):Object(n["d"])("",!0),(Object(n["k"])(!0),Object(n["c"])(n["a"],null,Object(n["o"])(t,(function(t){return Object(n["k"])(),Object(n["c"])("tr",null,[Object(n["g"])("td",null,Object(n["q"])(t.woodName),1),Object(n["g"])("td",oe,Object(n["q"])(a.display(t.length)),1),Object(n["g"])("td",ae,Object(n["q"])(a.display(t.width)),1),Object(n["g"])("td",se,Object(n["q"])(a.display(t.thickness)),1)])})),256))],64)})),256))])],64)})),de={computed:{settings:function(){return this.$store.state.settings},boards:function(){return this.$store.state.boards},wood:function(){return this.$store.state.wood},bom:function(){var t=this;return t.boards.map((function(e,r){var n=[],i={};for(var o in e.layers.forEach((function(e){i.hasOwnProperty(e.wood)?i[e.wood]+=e.width+t.settings.bladeKerf:i[e.wood]=e.width})),i)i.hasOwnProperty(o)&&n.push({board:r,woodName:o>=0&&o=t.layers.length)return"";var r=t.layers[e].wood;return r<0||r>=this.wood.length?"":this.wood[r].name},getLayerWidth:function(t,e){return e<0||e>=t.layers.length?"":this.display(t.layers[e].width)},display:function(t){return Y.display(t,this.settings.units)}}};r("978e");de.render=ce,de.__scopeId="data-v-30665a8d";var le=de,ue=r("21a6"),he=(r("c975"),r("d3b7"),r("5cc6"),r("9a8c"),r("a975"),r("735e"),r("c1ac"),r("d139"),r("3a7b"),r("d5d6"),r("82f8"),r("e91f"),r("60bd"),r("5f96"),r("3280"),r("3fcc"),r("ca91"),r("25a1"),r("cd26"),r("3c5d"),r("2954"),r("649e"),r("219c"),r("170b"),r("b39a"),r("72f7"),["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"]),ge=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function be(t){if(t>=ge.length)throw new Error("Unable to parse base64 string.");var e=ge[t];if(255===e)throw new Error("Unable to parse base64 string.");return e}function fe(t){var e,r="",n=t.length;for(e=2;e>2],r+=he[(3&t[e-2])<<4|t[e-1]>>4],r+=he[(15&t[e-1])<<2|t[e]>>6],r+=he[63&t[e]];return e===n+1&&(r+=he[t[e-2]>>2],r+=he[(3&t[e-2])<<4],r+="=="),e===n&&(r+=he[t[e-2]>>2],r+=he[(3&t[e-2])<<4|t[e-1]>>4],r+=he[(15&t[e-1])<<2],r+="="),r}function pe(t){if(t.length%4!==0)throw new Error("Unable to parse base64 string.");var e=t.indexOf("=");if(-1!==e&&e>16,o[s+1]=r>>8&255,o[s+2]=255&r;return o.subarray(0,o.length-n)}var Oe={name:"App",components:{EndGrainPreview:Ut,EdgeGrainPreview:Nt,Settings:Q,Layers:kt,Wood:It,CuttingList:le},data:function(){return{tab:"settings",saveFilename:"My cutting board",printEdgeGrain:!0,printEndGrain:!0,printCuttingList:!0}},created:function(){var t=this,e=function(){if(location.hash){var e=location.hash.substring(1);try{var r=pe(e);r&&t.$store.commit("loadMsgPack",r)}catch(n){console.error(n)}}};e(),window.addEventListener("hashchange",(function(){e()}))},computed:{boards:function(){return this.$store.state.boards},hash:function(){return fe(this.$store.getters.saveMsgPack)}},methods:{save:function(){var t=this.$store.getters.save,e=new Blob([t],{type:"text/plain; charset=utf-8"});Object(ue["saveAs"])(e,this.saveFilename+".json")},load:function(){var t=this,e=this.$refs.loadFile.files[0];if(e){this.saveFilename=e.name.toLowerCase().endsWith(".json")?e.name.substring(0,e.name.length-5):e.name;var r=new FileReader;r.addEventListener("load",(function(e){t.$store.commit("load",e.target.result)})),r.readAsBinaryString(e)}},print:function(){window.print()}},watch:{hash:function(t){history.replaceState({},"","#"+t)}}};r("2440"),r("ac47");Oe.render=M,Oe.__scopeId="data-v-0a5c6a00";var ve=Oe,me=(r("a434"),r("ddb0"),r("5502")),je={mm:"mm",cm:"cm",inchdecimal:"inchdecimal",isValid:function(t){switch(t){case je.mm:case je.cm:case je.inchdecimal:return!0;default:return!1}}},ye={uniform:"uniform",alternate:"alternate",custom:"custom",isValid:function(t){switch(t){case ye.uniform:case ye.alternate:case ye.custom:return t;default:return ye.uniform}}},we=r("d8b3");function ke(){return{units:je.cm,borders:!1,bladeKerf:.35,crosscutWidth:3,direction:ye.alternate,highlightBoard:!0,highlightLayer:!0}}function xe(){return[{name:"Walnut",color:"#58443f"},{name:"Maple",color:"#f2e0aa"},{name:"Cherry",color:"#bb8359"},{name:"Mahogany",color:"#98473f"},{name:"Yellowheart",color:"#ffff84"},{name:"White oak",color:"#fdf4b9"},{name:"Bubinga",color:"#7e3c34"},{name:"Jatoba",color:"#9b281c"},{name:"Padouk",color:"#933350"}]}function Be(){return[{thickness:2,length:70,layers:[{wood:8,width:1},{wood:1,width:1.5},{wood:8,width:2},{wood:1,width:2},{wood:8,width:15},{wood:1,width:2},{wood:8,width:1.5},{wood:1,width:1}]}]}function Le(){var t=ke(),e=Be(),r=[];return Ce(r,t,e),r}var Pe=Object(me["a"])({state:{volatile:{highlightedBoard:null,highlightedLayer:null},settings:ke(),wood:xe(),boards:Be(),endGrain:Le()},mutations:{addLayer:function(t,e){e<0||e>=t.boards.length||t.boards[e].layers.push({wood:0,width:Y.fromMillimeters(20,t.settings.units)})},removeLayer:function(t,e){if(!(e.board<0||e.board>=t.boards.length)){var r=t.boards[e.board];e.layer<0||e.layer>=r.layers.length||r.layers.splice(e.layer,1)}},moveLayer:function(t,e){if(!(e.board<0||e.board>=t.boards.length)){var r=t.boards[e.board];We(r.layers,e.from,e.to)}},addWood:function(t){t.wood.push({name:"Wood #"+(t.wood.length+1),color:"#f2e0aa"})},removeWood:function(t,e){e<0||e>=t.wood.length||(t.boards.forEach((function(t){t.layers.forEach((function(t){t.wood===e?t.wood=-1:t.wood>e&&t.wood--}))})),t.wood.splice(e,1))},updateVolatile:function(t,e){Ge(e,t.volatile)},updateSettings:function(t,e){var r=t.settings.units;Ge(e,t.settings),r!==t.settings.units&&(t.settings.bladeKerf=Y.limitDecimals(Y.convert(t.settings.bladeKerf,r,t.settings.units),3),t.settings.crosscutWidth=Y.limitDecimals(Y.convert(t.settings.crosscutWidth,r,t.settings.units),3),t.boards.forEach((function(e){e.thickness=Y.limitDecimals(Y.convert(e.thickness,r,t.settings.units),3),e.length=Y.limitDecimals(Y.convert(e.length,r,t.settings.units),3),e.layers.forEach((function(e){e.width=Y.limitDecimals(Y.convert(e.width,r,t.settings.units),3)}))})))},addBoard:function(t,e){if(e<0||e>=t.boards.length)t.boards.push({thickness:2,length:70,layers:[]});else{var r=t.boards[e];t.boards.push({thickness:r.thickness,length:r.length,layers:r.layers.map((function(t){return{wood:t.wood,width:t.width}}))}),Ce(t.endGrain,t.settings,t.boards)}},removeBoard:function(t,e){e<0||e>=t.boards.length||(t.boards.splice(e,1),t.endGrain.forEach((function(t){t.board==e?t.board=-1:t.board>e&&t.board--})),Ce(t.endGrain,t.settings,t.boards))},updateBoard:function(t,e){if(!(e.board<0||e.board>=t.boards.length)){var r=t.boards[e.board],n=r.length;Ge(e.values,r),n!==r.length&&Ce(t.endGrain,t.settings,t.boards)}},moveEndgrain:function(t,e){We(t.endGrain,e.from,e.to)},load:function(t,e){var r=JSON.parse(e);Ie(t,r)},loadMsgPack:function(t,e){try{var r=Object(we["deserialize"])(e);r&&Ie(t,r)}catch(n){console.error(n)}}},getters:{save:function(t){var e=He(t,!1);return JSON.stringify(e)},saveMsgPack:function(t){var e=He(t,!0);return Object(we["serialize"])(e)}}});function We(t,e,r){if(!(e<0||e>=t.length)&&!(r<0||r>t.length))if(r==t.length)t.push(t[e]),t.splice(e,1);else{var n=t[e];t.splice(e,1),r>e&&r--,t.splice(r,0,n)}}function Ce(t,e,r){for(var n=[],i=0;i=0&&t.board=o,i&&(n[t.board]-=o)),i||a.push(e)}));for(var s=a.length-1;s>=0;s--)t.splice(a[s],1);n.forEach((function(e,r){while(e>=o)t.push({board:r,reversed:!1}),e-=o,e=Y.limitDecimals(e,3)}))}function Ge(t,e){for(var r in t)t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&(e[r]=t[r])}function $e(t){var e=parseFloat(t);return isNaN(e)?0:e}function Ee(t){var e=parseInt(t);return isNaN(e)?0:e}function Ie(t,e){var r=Ue(e);Ge(r.settings,t.settings),t.wood=r.wood,t.boards=r.boards,t.endGrain=r.endGrain,Ce(t.endGrain,t.settings,t.boards)}var Me={settings:{self:"settings",units:"units",borders:"borders",bladeKerf:"bladeKerf",crosscutWidth:"crosscutWidth",direction:"direction",highlightBoard:"highlightBoard",highlightLayer:"highlightLayer"},wood:{self:"wood",name:"name",color:"color"},boards:{self:"boards",thickness:"thickness",length:"length",layers:{self:"layers",wood:"wood",width:"width"}},endGrain:{self:"endGrain",board:"board",reversed:"reversed"}},Te={settings:{self:"s",units:"u",borders:"b",bladeKerf:"k",crosscutWidth:"c",direction:"d",highlightBoard:"h",highlightLayer:"l"},wood:{self:"w",name:"n",color:"c"},boards:{self:"b",thickness:"t",length:"x",layers:{self:"l",wood:"w",width:"x"}},endGrain:{self:"e",board:"b",reversed:"r"}};function He(t,e){var r=e?Te:Me,n={};return n[r.settings.self]=Se(t.settings,r),n[r.wood.self]=De(t.wood,r),n[r.boards.self]=Ae(t.boards,r),n[r.endGrain.self]=qe(t.endGrain,r),n}function Se(t,e){var r={};return r[e.settings.units]=t.units,r[e.settings.borders]=t.borders,r[e.settings.bladeKerf]=t.bladeKerf,r[e.settings.crosscutWidth]=t.crosscutWidth,r[e.settings.direction]=t.direction,r[e.settings.highlightBoard]=t.highlightBoard,r[e.settings.highlightLayer]=t.highlightLayer,r}function De(t,e){return 0===t.length?[]:t.map((function(t){var r={};return r[e.wood.name]=t.name,r[e.wood.color]=t.color,r}))}function Ae(t,e){return t.map((function(t){var r={};return r[e.boards.length]=t.length,r[e.boards.thickness]=t.thickness,r[e.boards.layers.self]=t.layers.map((function(t){var r={};return r[e.boards.layers.wood]=t.wood,r[e.boards.layers.width]=t.width,r})),r}))}function qe(t,e){return t.map((function(t){var r={};return r[e.endGrain.board]=t.board,r[e.endGrain.reversed]=t.reversed,r}))}function Ue(t){var e=t.hasOwnProperty(Te.settings.self)?Te:Me,r={settings:Ve(t,e),wood:_e(t,e),boards:Fe(t,e),endGrain:Ke(t,e)};return t.hasOwnProperty("settings")&&(t.settings.hasOwnProperty("alternateDirection")&&(r.settings.direction=t.settings.alternateDirection?ye.alternate:ye.uniform),t.settings.hasOwnProperty("boardLength")&&(r.boards[0].length=$e(t.settings.boardLength)),t.settings.hasOwnProperty("boardThickness")&&(r.boards[0].thickness=$e(t.settings.boardThickness))),t.hasOwnProperty(e.settings.self)&&(t[e.settings.self].hasOwnProperty(e.settings.highlightBoard)||(r.settings.highlightBoard=!0),t[e.settings.self].hasOwnProperty(e.settings.highlightLayer)||(r.settings.highlightLayer=!0)),0===r.endGrain.length&&Ce(r.endGrain,r.settings,r.boards),r}function Ve(t,e){if(!t.hasOwnProperty(e.settings.self))return ke();var r=t[e.settings.self];return{units:je.isValid(r[e.settings.units])?r[e.settings.units]:je.cm,borders:!0===r[e.settings.borders],bladeKerf:$e(r[e.settings.bladeKerf]),crosscutWidth:$e(r[e.settings.crosscutWidth]),direction:ye.isValid(r[e.settings.direction])?r[e.settings.direction]:ye.uniform,highlightBoard:!0===r[e.settings.highlightBoard],highlightLayer:!0===r[e.settings.highlightLayer]}}function _e(t,e){return t.hasOwnProperty(e.wood.self)&&Array.isArray(t[e.wood.self])?t[e.wood.self].map((function(t){return{name:t[e.wood.name],color:/^#[0-9A-F]{6}$/i.test(t[e.wood.color]||"")?t[e.wood.color]:"#000000"}})):[]}function Fe(t,e){if(!t.hasOwnProperty(e.boards.self)||!Array.isArray(t[e.boards.self]))return[];var r=t[e.boards.self].map((function(t){var r={thickness:$e(t[e.boards.thickness]),length:$e(t[e.boards.length]),layers:[]};return t.hasOwnProperty(e.boards.layers.self)&&Array.isArray(t[e.boards.layers.self])&&(r.layers=t[e.boards.layers.self].map((function(t){return{wood:Ee(t[e.boards.layers.wood]),width:$e(t[e.boards.layers.width])}}))),r}));return r.length>0?r:{length:0,thickness:0,layers:[]}}function Ke(t,e){return t.hasOwnProperty(e.endGrain.self)&&Array.isArray(t[e.endGrain.self])?t[e.endGrain.self].map((function(t){return{board:Ee(t[e.endGrain.board]),reversed:!0===t[e.endGrain.reversed]}})):[]}var Re=r("ecee"),Ne=r("c074"),ze=r("ad3d");Re["c"].add(Ne["e"],Ne["b"],Ne["d"],Ne["c"],Ne["a"],Ne["f"]),Object(n["b"])(ve).use(Pe).component("font-awesome-icon",ze["a"]).mount("#app")},"6dfb":function(t,e,r){"use strict";r("1cce")},8938:function(t,e,r){},"8b67":function(t,e,r){"use strict";r("c355")},"978e":function(t,e,r){"use strict";r("bfd1")},"9c63":function(t,e,r){},"9e1e":function(t,e,r){},"9f4a":function(t,e,r){},ac47:function(t,e,r){"use strict";r("9f4a")},b47d:function(t,e,r){"use strict";r("15d0")},bfd1:function(t,e,r){},c355:function(t,e,r){},e9ae:function(t,e,r){"use strict";r("9e1e")}}); +//# sourceMappingURL=app.62fd703d.js.map \ No newline at end of file diff --git a/docs/js/app.62fd703d.js.map b/docs/js/app.62fd703d.js.map new file mode 100644 index 0000000..e268549 --- /dev/null +++ b/docs/js/app.62fd703d.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?a378","webpack:///./src/components/EndGrainPreview.vue?5701","webpack:///./src/App.vue","webpack:///./src/components/Settings.vue","webpack:///./src/lib/units.js","webpack:///./src/components/Settings.vue?b32f","webpack:///./src/components/Layers.vue","webpack:///./src/components/Layers.vue?f1ba","webpack:///./src/components/Wood.vue","webpack:///./src/components/Wood.vue?85c2","webpack:///./src/components/EndGrainPreview.vue","webpack:///./src/components/EndGrainPreview.vue?ab3d","webpack:///./src/components/EdgeGrainPreview.vue","webpack:///./src/components/EdgeGrainPreview.vue?0ca3","webpack:///./src/components/CuttingList.vue","webpack:///./src/components/CuttingList.vue?203c","webpack:///./src/lib/base64.js","webpack:///./src/App.vue?eabf","webpack:///./src/lib/enums.js","webpack:///./src/store.js","webpack:///./src/main.js","webpack:///./src/components/EdgeGrainPreview.vue?d87f","webpack:///./src/components/Wood.vue?9d37","webpack:///./src/components/CuttingList.vue?ff1d","webpack:///./src/App.vue?aa56","webpack:///./src/components/Layers.vue?eb9a","webpack:///./src/components/Settings.vue?cedc"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","class","for","type","ref","accept","href","target","tab","icon","size","fixed-width","printEndGrain","id","printEdgeGrain","printCuttingList","print","saveFilename","save","load","scale","boards","board","boardIndex","settings","units","$store","commit","$event","bladeKerf","parseFloatDef","crosscutWidth","millimetersPerInch","millimetersPerCentimeter","pixelsPerMillimeter","convert","fromUnits","toUnits","millimeters","this","toMillimeters","fromMillimeters","toPixels","Math","ceil","console","error","display","displayValue","limitDecimals","decimals","power","pow","round","computed","state","methods","parsedValue","parseFloat","is","NaN","render","__scopeId","highlightBoard","removeHighlightBoard","previousBoard","disabled","removeBoard","addBoard","nextBoard","currentBoard","thickness","layers","layer","index","dropTarget","startDrag","highlightLayer","removeHighlightLayer","wood","item","width","removeLayer","widthWarning","addLayer","checked","borders","direction","setDirection","dragIndex","updateHighlightedBoard","volatile","self","minWidth","currentWidth","maxWidth","forEach","boardWidth","map","reduce","accumulator","currentValue","message","maxBoardWidth","dragMouseMove","event","getTargetLayer","pageY","document","removeEventListener","from","to","addEventListener","yPos","firstLayer","getPageOffsetRect","$refs","layer0","lastLayer","bottom","top","currentTarget","testTarget","element","clientRect","getBoundingClientRect","scrollLeft","pageXOffset","documentElement","scrollTop","pageYOffset","left","right","highlightedBoard","highlightedLayer","watch","newValue","color","removeWood","addWood","boardHeight","viewportWidth","height","viewportHeight","viewBox","x","y","getBoardLayerOffset","style","getBoardLayerStyle","x1","y1","x2","y2","boardPixelHeight","endGrain","getLayerOffset","transform","getLayerTransform","mouseDown","props","Number","boardPixelWidth","floor","offset","woodIndex","borderStyle","reversed","reverseLayer","startX","pageX","dragging","moveEvent","abs","getTargetStrip","xPos","firstStrip","strip0","lastStrip","getLayerStyle","colspan","getLayerWood","getLayerWidth","bom","stock","woodName","woodTally","base64abc","base64codes","getBase64Code","charCode","Error","code","bytesToBase64","bytes","base64ToBytes","str","indexOf","buffer","missingOctets","endsWith","Uint8Array","charCodeAt","subarray","components","EndGrainPreview","EdgeGrainPreview","Settings","Layers","Wood","CuttingList","created","checkHash","location","hash","substring","decoded","e","getters","saveMsgPack","blob","Blob","loadFile","files","toLowerCase","reader","FileReader","readAsBinaryString","history","replaceState","UnitsEnum","mm","cm","inchdecimal","DirectionEnum","uniform","alternate","custom","DefaultSettings","DefaultWood","DefaultBoards","DefaultEndGrain","updateEndGrain","createStore","mutations","payload","moveLayer","moveArrayItem","updateVolatile","mergeObject","updateSettings","oldUnits","copyFrom","source","updateBoard","oldLength","values","moveEndgrain","parsedPayload","JSON","parse","loadObject","loadMsgPack","deserialize","serialized","serializeState","stringify","serialize","array","boardTally","cutWidth","remove","boardAvailable","remaining","isNaN","parseIntDef","parseInt","deserialized","deserializeState","SettingsNameMapJSON","SettingsNameMapMsgPack","messagePack","serializeSettings","serializeWood","serializeBoards","serializeEndgrain","boardResult","layerResult","deserializeSettings","deserializeWood","deserializeBoards","deserializeEndgrain","alternateDirection","boardLength","boardThickness","isValid","Array","isArray","test","library","add","faSlidersH","faLayerGroup","faSave","faPrint","faInfoCircle","faTree","createApp","App","use","store","component","FontAwesomeIcon","mount"],"mappings":"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","file":"js/app.62fd703d.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&id=0a5c6a00&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EndGrainPreview.vue?vue&type=style&index=0&id=a8f1d07c&lang=scss&scoped=true\"","\n\n\n\n\n\n\n","\r\n\r\n\r\n\r\n","const millimetersPerInch = 25.4;\r\nconst millimetersPerCentimeter = 10;\r\nconst pixelsPerMillimeter = 1;\r\n\r\n\r\n\r\nconst units = {\r\n convert(value, fromUnits, toUnits)\r\n {\r\n const millimeters = this.toMillimeters(value, fromUnits);\r\n return this.fromMillimeters(millimeters, toUnits);\r\n },\r\n\r\n\r\n toPixels(value, units)\r\n {\r\n return Math.ceil(this.toMillimeters(value, units) * pixelsPerMillimeter);\r\n },\r\n\r\n\r\n toMillimeters(value, units)\r\n {\r\n switch (units)\r\n {\r\n case 'mm': return value;\r\n case 'cm': return value * millimetersPerCentimeter;\r\n case 'inchdecimal': return value * millimetersPerInch;\r\n }\r\n\r\n console.error('Invalid units type: ' + units);\r\n return 0;\r\n },\r\n\r\n\r\n fromMillimeters(value, units)\r\n {\r\n switch (units)\r\n {\r\n case 'mm': return value;\r\n case 'cm': return value / millimetersPerCentimeter;\r\n case 'inchdecimal': return value / millimetersPerInch;\r\n }\r\n\r\n console.error('Invalid units type: ' + units);\r\n return 0;\r\n },\r\n\r\n\r\n display(value, units)\r\n {\r\n const displayValue = this.limitDecimals(value, 3);\r\n\r\n switch (units)\r\n {\r\n case 'mm': return displayValue + ' mm';\r\n case 'cm': return displayValue + ' cm';\r\n case 'inchdecimal': return displayValue + ' inch';\r\n }\r\n\r\n console.error('Invalid units type: ' + units);\r\n return displayValue;\r\n },\r\n\r\n\r\n limitDecimals(value, decimals)\r\n {\r\n // toFixed turns it into a string and pads it with zeroes\r\n const power = Math.pow(10, decimals);\r\n return Math.round(value * power) / power;\r\n }\r\n};\r\n\r\n\r\nexport { units }","import { render } from \"./Settings.vue?vue&type=template&id=7067c7c7&scoped=true\"\nimport script from \"./Settings.vue?vue&type=script&lang=js\"\nexport * from \"./Settings.vue?vue&type=script&lang=js\"\n\nimport \"./Settings.vue?vue&type=style&index=0&id=7067c7c7&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7067c7c7\"\n\nexport default script","\r\n\r\n\r\n\r\n","import { render } from \"./Layers.vue?vue&type=template&id=342492d6&scoped=true\"\nimport script from \"./Layers.vue?vue&type=script&lang=js\"\nexport * from \"./Layers.vue?vue&type=script&lang=js\"\n\nimport \"./Layers.vue?vue&type=style&index=0&id=342492d6&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-342492d6\"\n\nexport default script","\r\n\r\n\r\n\r\n","import { render } from \"./Wood.vue?vue&type=template&id=15338ab0&scoped=true\"\nimport script from \"./Wood.vue?vue&type=script&lang=js\"\nexport * from \"./Wood.vue?vue&type=script&lang=js\"\n\nimport \"./Wood.vue?vue&type=style&index=0&id=15338ab0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-15338ab0\"\n\nexport default script","\n\n\n\n","import { render } from \"./EndGrainPreview.vue?vue&type=template&id=a8f1d07c&scoped=true\"\nimport script from \"./EndGrainPreview.vue?vue&type=script&lang=js\"\nexport * from \"./EndGrainPreview.vue?vue&type=script&lang=js\"\n\nimport \"./EndGrainPreview.vue?vue&type=style&index=0&id=a8f1d07c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a8f1d07c\"\n\nexport default script","\n\n\n\n","import { render } from \"./EdgeGrainPreview.vue?vue&type=template&id=a5fd011a&scoped=true\"\nimport script from \"./EdgeGrainPreview.vue?vue&type=script&lang=js\"\nexport * from \"./EdgeGrainPreview.vue?vue&type=script&lang=js\"\n\nimport \"./EdgeGrainPreview.vue?vue&type=style&index=0&id=a5fd011a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a5fd011a\"\n\nexport default script","\r\n\r\n\r\n\r\n","import { render } from \"./CuttingList.vue?vue&type=template&id=30665a8d&scoped=true\"\nimport script from \"./CuttingList.vue?vue&type=script&lang=js\"\nexport * from \"./CuttingList.vue?vue&type=script&lang=js\"\n\nimport \"./CuttingList.vue?vue&type=style&index=0&id=30665a8d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-30665a8d\"\n\nexport default script","/*\r\nMIT License\r\nCopyright (c) 2020 Egor Nepomnyaschih\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n*/\r\n\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst base64abc = [],\r\n A = \"A\".charCodeAt(0),\r\n a = \"a\".charCodeAt(0),\r\n n = \"0\".charCodeAt(0);\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(A + i));\r\n}\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(a + i));\r\n}\r\nfor (let i = 0; i < 10; ++i) {\r\n base64abc.push(String.fromCharCode(n + i));\r\n}\r\nbase64abc.push(\"+\");\r\nbase64abc.push(\"/\");\r\n*/\r\nconst base64abc = [\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\",\r\n \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\",\r\n \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\",\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"+\", \"/\"\r\n];\r\n\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst l = 256, base64codes = new Uint8Array(l);\r\nfor (let i = 0; i < l; ++i) {\r\n base64codes[i] = 255; // invalid character\r\n}\r\nbase64abc.forEach((char, index) => {\r\n base64codes[char.charCodeAt(0)] = index;\r\n});\r\nbase64codes[\"=\".charCodeAt(0)] = 0; // ignored anyway, so we just need to prevent an error\r\n*/\r\nconst base64codes = [\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,\r\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255,\r\n 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\r\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,\r\n 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\r\n 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\r\n];\r\n\r\nfunction getBase64Code(charCode) {\r\n if (charCode >= base64codes.length) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const code = base64codes[charCode];\r\n if (code === 255) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n return code;\r\n}\r\n\r\nexport function bytesToBase64(bytes) {\r\n let result = '', i, l = bytes.length;\r\n for (i = 2; i < l; i += 3) {\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[((bytes[i - 1] & 0x0F) << 2) | (bytes[i] >> 6)];\r\n result += base64abc[bytes[i] & 0x3F];\r\n }\r\n if (i === l + 1) { // 1 octet yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[(bytes[i - 2] & 0x03) << 4];\r\n result += \"==\";\r\n }\r\n if (i === l) { // 2 octets yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[(bytes[i - 1] & 0x0F) << 2];\r\n result += \"=\";\r\n }\r\n return result;\r\n}\r\n\r\nexport function base64ToBytes(str) {\r\n if (str.length % 4 !== 0) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const index = str.indexOf(\"=\");\r\n if (index !== -1 && index < str.length - 2) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0,\r\n n = str.length,\r\n result = new Uint8Array(3 * (n / 4)),\r\n buffer;\r\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\r\n buffer =\r\n getBase64Code(str.charCodeAt(i)) << 18 |\r\n getBase64Code(str.charCodeAt(i + 1)) << 12 |\r\n getBase64Code(str.charCodeAt(i + 2)) << 6 |\r\n getBase64Code(str.charCodeAt(i + 3));\r\n result[j] = buffer >> 16;\r\n result[j + 1] = (buffer >> 8) & 0xFF;\r\n result[j + 2] = buffer & 0xFF;\r\n }\r\n return result.subarray(0, result.length - missingOctets);\r\n}\r\n\r\nexport function base64encode(str, encoder = new TextEncoder()) {\r\n return bytesToBase64(encoder.encode(str));\r\n}\r\n\r\nexport function base64decode(str, decoder = new TextDecoder()) {\r\n return decoder.decode(base64ToBytes(str));\r\n}","import { render } from \"./App.vue?vue&type=template&id=0a5c6a00&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=0a5c6a00&lang=scss\"\nimport \"./App.vue?vue&type=style&index=1&id=0a5c6a00&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0a5c6a00\"\n\nexport default script","const UnitsEnum = {\r\n mm: 'mm',\r\n cm: 'cm',\r\n inchdecimal: 'inchdecimal',\r\n //inchfractional: 'inchfractional'\r\n};\r\n\r\n\r\nUnitsEnum.isValid = (value) =>\r\n{\r\n switch (value)\r\n {\r\n case UnitsEnum.mm:\r\n case UnitsEnum.cm:\r\n case UnitsEnum.inchdecimal:\r\n //case UnitsEnum.inchfractional:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n};\r\n\r\n\r\nconst DirectionEnum = {\r\n uniform: 'uniform',\r\n alternate: 'alternate',\r\n custom: 'custom'\r\n};\r\n\r\n\r\nDirectionEnum.isValid = (value) =>\r\n{\r\n switch (value)\r\n {\r\n case DirectionEnum.uniform:\r\n case DirectionEnum.alternate:\r\n case DirectionEnum.custom:\r\n return value;\r\n\r\n default:\r\n return DirectionEnum.uniform;\r\n }\r\n};\r\n\r\n\r\nexport {\r\n UnitsEnum,\r\n DirectionEnum\r\n}","import { createStore } from 'vuex';\nimport { units } from './lib/units';\nimport { UnitsEnum, DirectionEnum } from './lib/enums';\n\nimport { serialize, deserialize } from '@ygoe/msgpack';\n\n\n\nfunction DefaultSettings()\n{\n return {\n units: UnitsEnum.cm,\n borders: false,\n bladeKerf: 0.35,\n crosscutWidth: 3,\n direction: DirectionEnum.alternate,\n highlightBoard: true,\n highlightLayer: true\n };\n}\n\n\nfunction DefaultWood()\n{\n return [\n { name: 'Walnut', color: '#58443f' },\n { name: 'Maple', color: '#f2e0aa' },\n { name: 'Cherry', color: '#bb8359' },\n { name: 'Mahogany', color: '#98473f' },\n { name: 'Yellowheart', color: '#ffff84' },\n { name: 'White oak', color: '#fdf4b9' },\n { name: 'Bubinga', color: '#7e3c34' },\n { name: 'Jatoba', color: '#9b281c' },\n { name: 'Padouk', color: '#933350' }\n ];\n}\n\n\nfunction DefaultBoards()\n{\n return [\n {\n thickness: 2,\n length: 70,\n\n layers: [\n { wood: 8, width: 1 },\n { wood: 1, width: 1.5 },\n { wood: 8, width: 2 },\n { wood: 1, width: 2 },\n { wood: 8, width: 15 },\n { wood: 1, width: 2 },\n { wood: 8, width: 1.5 },\n { wood: 1, width: 1 }\n ]\n }\n ];\n}\n\n\nfunction DefaultEndGrain()\n{\n const settings = DefaultSettings();\n const boards = DefaultBoards();\n const result = [];\n\n updateEndGrain(result, settings, boards);\n\n return result;\n}\n\n\nexport default createStore({\n state: {\n // These are not stored persistently\n volatile: {\n highlightedBoard: null,\n highlightedLayer: null\n },\n\n // When adding any persistent settings, remember to update the\n // serializeState and deserializeState functions below\n settings: DefaultSettings(),\n wood: DefaultWood(),\n boards: DefaultBoards(),\n endGrain: DefaultEndGrain()\n },\n\n mutations: {\n addLayer(state, board)\n {\n if (board < 0 || board >= state.boards.length)\n return;\n\n state.boards[board].layers.push({\n wood: 0,\n width: units.fromMillimeters(20, state.settings.units)\n });\n },\n\n removeLayer(state, payload)\n {\n if (payload.board < 0 || payload.board >= state.boards.length)\n return;\n\n const board = state.boards[payload.board];\n\n if (payload.layer < 0 || payload.layer >= board.layers.length)\n return;\n\n board.layers.splice(payload.layer, 1);\n },\n\n moveLayer(state, payload)\n {\n if (payload.board < 0 || payload.board >= state.boards.length)\n return;\n\n const board = state.boards[payload.board];\n moveArrayItem(board.layers, payload.from, payload.to);\n },\n\n\n addWood(state)\n {\n state.wood.push({\n name: 'Wood #' + (state.wood.length + 1),\n color: '#f2e0aa'\n });\n },\n\n removeWood(state, index)\n {\n if (index < 0 || index >= state.wood.length)\n return;\n\n // Update all layers\n state.boards.forEach(board =>\n {\n board.layers.forEach(layer =>\n {\n if (layer.wood === index)\n layer.wood = -1\n else if (layer.wood > index)\n layer.wood--;\n });\n });\n\n state.wood.splice(index, 1);\n },\n\n\n updateVolatile(state, payload)\n {\n mergeObject(payload, state.volatile);\n },\n\n\n updateSettings(state, payload)\n {\n const oldUnits = state.settings.units;\n mergeObject(payload, state.settings);\n\n if (oldUnits !== state.settings.units)\n {\n // Convert the settings\n state.settings.bladeKerf = units.limitDecimals(units.convert(state.settings.bladeKerf, oldUnits, state.settings.units), 3);\n state.settings.crosscutWidth = units.limitDecimals(units.convert(state.settings.crosscutWidth, oldUnits, state.settings.units), 3);\n\n // Convert the boards\n state.boards.forEach(board =>\n {\n board.thickness = units.limitDecimals(units.convert(board.thickness, oldUnits, state.settings.units), 3);\n board.length = units.limitDecimals(units.convert(board.length, oldUnits, state.settings.units), 3);\n\n board.layers.forEach(layer =>\n {\n layer.width = units.limitDecimals(units.convert(layer.width, oldUnits, state.settings.units), 3);\n });\n });\n }\n },\n\n\n addBoard(state, copyFrom)\n {\n if (copyFrom < 0 || copyFrom >= state.boards.length)\n {\n state.boards.push({\n thickness: 2,\n length: 70,\n layers: []\n });\n\n return;\n }\n\n const source = state.boards[copyFrom];\n\n state.boards.push({\n thickness: source.thickness,\n length: source.length,\n layers: source.layers.map(layer =>\n {\n return {\n wood: layer.wood,\n width: layer.width\n };\n })\n });\n\n updateEndGrain(state.endGrain, state.settings, state.boards);\n },\n\n\n removeBoard(state, index)\n {\n if (index < 0 || index >= state.boards.length)\n return;\n\n state.boards.splice(index, 1);\n\n // Update all references to the boards coming after\n state.endGrain.forEach(layer =>\n {\n if (layer.board == index)\n layer.board = -1;\n else if (layer.board > index)\n layer.board--;\n });\n\n updateEndGrain(state.endGrain, state.settings, state.boards);\n },\n\n\n updateBoard(state, payload)\n {\n if (payload.board < 0 || payload.board >= state.boards.length)\n return;\n\n const board = state.boards[payload.board];\n const oldLength = board.length;\n mergeObject(payload.values, board);\n\n if (oldLength !== board.length)\n updateEndGrain(state.endGrain, state.settings, state.boards);\n },\n\n\n moveEndgrain(state, payload)\n {\n moveArrayItem(state.endGrain, payload.from, payload.to);\n },\n\n\n // TODO some updates, like Wood properties and Layer width, don't go through the store yet. this works,\n // but is kinda defeating the rules of Vuex.\n\n\n load(state, payload)\n {\n const parsedPayload = JSON.parse(payload);\n loadObject(state, parsedPayload);\n },\n\n loadMsgPack(state, payload)\n {\n try\n {\n const parsedPayload = deserialize(payload);\n if (parsedPayload)\n loadObject(state, parsedPayload);\n }\n catch(e)\n {\n console.error(e);\n }\n }\n },\n\n getters: {\n save(state)\n {\n const serialized = serializeState(state, false);\n return JSON.stringify(serialized);\n },\n\n saveMsgPack(state)\n {\n const serialized = serializeState(state, true);\n return serialize(serialized);\n }\n }\n});\n\n\n\n\nfunction moveArrayItem(array, from, to)\n{\n if (from < 0 || from >= array.length)\n return;\n\n if (to < 0 || to > array.length)\n return;\n\n if (to == array.length)\n {\n // Move to end\n array.push(array[from]);\n array.splice(from, 1);\n }\n else\n {\n const item = array[from];\n array.splice(from, 1);\n\n if (to > from)\n to--;\n\n array.splice(to, 0, item);\n }\n}\n\n\nfunction stripsPerBoard(settings, board)\n{\n const stripAndKerf = settings.crosscutWidth + settings.bladeKerf;\n if (stripAndKerf === 0)\n return 0;\n\n let stripsPerBoard = (board.length + settings.bladeKerf) / stripAndKerf;\n\n // Try to account for rounding errors\n stripsPerBoard = units.limitDecimals(stripsPerBoard, 3);\n\n return Math.floor(stripsPerBoard);\n}\n\n\nfunction updateEndGrain(result, settings, boards)\n{\n const boardTally = [];\n for (let i = 0; i < boards.length; i++)\n boardTally[i] = boards[i].length + settings.bladeKerf;\n\n const cutWidth = settings.crosscutWidth + settings.bladeKerf;\n const remove = [];\n\n // Check the current configuration and see if we still have enough\n result.forEach((layer, index) =>\n {\n let boardAvailable = false;\n\n if (layer.board >= 0 && layer.board < boards.length)\n {\n boardAvailable = boardTally[layer.board] >= cutWidth;\n if (boardAvailable)\n boardTally[layer.board] -= cutWidth;\n }\n\n if (!boardAvailable)\n remove.push(index);\n });\n\n for (let i = remove.length - 1; i >= 0; i--)\n result.splice(remove[i], 1);\n\n // If we have sufficient board length left, add the layers for it\n boardTally.forEach((remaining, index) =>\n {\n while (remaining >= cutWidth)\n {\n result.push({ board: index, reversed: false });\n remaining -= cutWidth;\n\n // Try to account for rounding errors\n remaining = units.limitDecimals(remaining, 3);\n }\n });\n}\n\n\n\nfunction mergeObject(source, target)\n{\n for (const property in source)\n {\n if (!source.hasOwnProperty(property) || !target.hasOwnProperty(property))\n continue;\n\n target[property] = source[property];\n }\n}\n\n\nfunction parseFloatDef(value)\n{\n const parsedValue = parseFloat(value);\n return isNaN(parsedValue) ? 0 : parsedValue;\n}\n\n\nfunction parseIntDef(value)\n{\n const parsedValue = parseInt(value);\n return isNaN(parsedValue) ? 0 : parsedValue;\n}\n\n\nfunction loadObject(state, parsedPayload)\n{\n const deserialized = deserializeState(parsedPayload);\n\n mergeObject(deserialized.settings, state.settings);\n state.wood = deserialized.wood;\n state.boards = deserialized.boards;\n state.endGrain = deserialized.endGrain;\n\n updateEndGrain(state.endGrain, state.settings, state.boards);\n}\n\n\n// For the MessagePack version that is used in the URL, we minimize the\n// property names as well to significantly reduce the size. Do not do\n// this for the downloaded versions to make them more readable.\n// Note that this map is also used to convert older MsgPack encoded payloads,\n// as they used the same layout as the JSON data.\nconst SettingsNameMapJSON = {\n settings: {\n self: 'settings',\n units: 'units',\n borders: 'borders',\n bladeKerf: 'bladeKerf',\n crosscutWidth: 'crosscutWidth',\n direction: 'direction',\n highlightBoard: 'highlightBoard',\n highlightLayer: 'highlightLayer'\n },\n\n wood: {\n self: 'wood',\n name: 'name',\n color: 'color'\n },\n\n boards: {\n self: 'boards',\n thickness: 'thickness',\n length: 'length',\n layers: {\n self: 'layers',\n wood: 'wood',\n width: 'width'\n }\n },\n\n endGrain: {\n self: 'endGrain',\n board: 'board',\n reversed: 'reversed'\n }\n};\n\n\nconst SettingsNameMapMsgPack = {\n settings: {\n self: 's',\n units: 'u',\n borders: 'b',\n bladeKerf: 'k',\n crosscutWidth: 'c',\n direction: 'd',\n highlightBoard: 'h',\n highlightLayer: 'l'\n },\n\n wood: {\n self: 'w',\n name: 'n',\n color: 'c'\n },\n\n boards: {\n self: 'b',\n thickness: 't',\n length: 'x',\n layers: {\n self: 'l',\n wood: 'w',\n width: 'x'\n }\n },\n\n endGrain: {\n self: 'e',\n board: 'b',\n reversed: 'r'\n }\n};\n\n\n\n// All external input and output is done through these functions to provide backwards\n// compatibility and perform sanity checking. This means the rest of the application\n// trust that the contents of the store is as expected.\nfunction serializeState(state, messagePack)\n{\n const map = messagePack ? SettingsNameMapMsgPack : SettingsNameMapJSON;\n const result = {};\n\n result[map.settings.self] = serializeSettings(state.settings, map);\n result[map.wood.self] = serializeWood(state.wood, map);\n result[map.boards.self] = serializeBoards(state.boards, map);\n result[map.endGrain.self] = serializeEndgrain(state.endGrain, map);\n\n return result;\n}\n\n\nfunction serializeSettings(settings, map)\n{\n const result = {};\n\n result[map.settings.units] = settings.units;\n result[map.settings.borders] = settings.borders;\n result[map.settings.bladeKerf] = settings.bladeKerf;\n result[map.settings.crosscutWidth] = settings.crosscutWidth;\n result[map.settings.direction] = settings.direction;\n result[map.settings.highlightBoard] = settings.highlightBoard;\n result[map.settings.highlightLayer] = settings.highlightLayer;\n\n return result;\n}\n\n\nfunction serializeWood(wood, map)\n{\n if (wood.length === 0)\n return [];\n\n return wood.map(item =>\n {\n const result = {};\n\n result[map.wood.name] = item.name;\n result[map.wood.color] = item.color;\n\n return result;\n });\n}\n\n\nfunction serializeBoards(boards, map)\n{\n return boards.map(board =>\n {\n const boardResult = {};\n\n boardResult[map.boards.length] = board.length;\n boardResult[map.boards.thickness] = board.thickness;\n\n boardResult[map.boards.layers.self] = board.layers.map(layer =>\n {\n const layerResult = {};\n\n layerResult[map.boards.layers.wood] = layer.wood;\n layerResult[map.boards.layers.width] = layer.width;\n\n return layerResult;\n });\n\n return boardResult;\n });\n}\n\n\nfunction serializeEndgrain(endGrain, map)\n{\n return endGrain.map(layer =>\n {\n const layerResult = {};\n\n layerResult[map.endGrain.board] = layer.board;\n layerResult[map.endGrain.reversed] = layer.reversed;\n\n return layerResult;\n });\n}\n\n\n\nfunction deserializeState(parsedPayload)\n{\n const map = parsedPayload.hasOwnProperty(SettingsNameMapMsgPack.settings.self) ? SettingsNameMapMsgPack : SettingsNameMapJSON;\n\n const result = {\n settings: deserializeSettings(parsedPayload, map),\n wood: deserializeWood(parsedPayload, map),\n boards: deserializeBoards(parsedPayload, map),\n endGrain: deserializeEndgrain(parsedPayload, map)\n };\n\n\n // Backwards compatibility\n if (parsedPayload.hasOwnProperty('settings'))\n {\n if (parsedPayload.settings.hasOwnProperty('alternateDirection'))\n result.settings.direction = parsedPayload.settings.alternateDirection ? DirectionEnum.alternate : DirectionEnum.uniform;\n\n if (parsedPayload.settings.hasOwnProperty('boardLength'))\n result.boards[0].length = parseFloatDef(parsedPayload.settings.boardLength);\n\n if (parsedPayload.settings.hasOwnProperty('boardThickness'))\n result.boards[0].thickness = parseFloatDef(parsedPayload.settings.boardThickness);\n }\n\n if (parsedPayload.hasOwnProperty(map.settings.self))\n {\n if (!parsedPayload[map.settings.self].hasOwnProperty(map.settings.highlightBoard))\n result.settings.highlightBoard = true;\n\n if (!parsedPayload[map.settings.self].hasOwnProperty(map.settings.highlightLayer))\n result.settings.highlightLayer = true;\n }\n\n\n if (result.endGrain.length === 0)\n updateEndGrain(result.endGrain, result.settings, result.boards);\n\n return result;\n}\n\n\nfunction deserializeSettings(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.settings.self))\n return DefaultSettings();\n\n const settings = parsedPayload[map.settings.self];\n\n return {\n units: UnitsEnum.isValid(settings[map.settings.units]) ? settings[map.settings.units] : UnitsEnum.cm,\n borders: settings[map.settings.borders] === true,\n bladeKerf: parseFloatDef(settings[map.settings.bladeKerf]),\n crosscutWidth: parseFloatDef(settings[map.settings.crosscutWidth]),\n direction: DirectionEnum.isValid(settings[map.settings.direction]) ? settings[map.settings.direction] : DirectionEnum.uniform,\n highlightBoard: settings[map.settings.highlightBoard] === true,\n highlightLayer: settings[map.settings.highlightLayer] === true\n };\n}\n\n\nfunction deserializeWood(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.wood.self) || !Array.isArray(parsedPayload[map.wood.self]))\n return [];\n\n return parsedPayload[map.wood.self].map(item =>\n {\n return {\n name: item[map.wood.name],\n color: /^#[0-9A-F]{6}$/i.test(item[map.wood.color] || '') ? item[map.wood.color] : '#000000'\n };\n });\n}\n\n\nfunction deserializeBoards(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.boards.self) || !Array.isArray(parsedPayload[map.boards.self]))\n return [];\n\n const result = parsedPayload[map.boards.self].map(board =>\n {\n const boardResult = {\n thickness: parseFloatDef(board[map.boards.thickness]),\n length: parseFloatDef(board[map.boards.length]),\n layers: []\n };\n\n if (board.hasOwnProperty(map.boards.layers.self) && Array.isArray(board[map.boards.layers.self]))\n {\n boardResult.layers = board[map.boards.layers.self].map(layer =>\n {\n return {\n wood: parseIntDef(layer[map.boards.layers.wood]),\n width: parseFloatDef(layer[map.boards.layers.width])\n }\n });\n }\n\n return boardResult;\n });\n\n return result.length > 0\n ? result\n : { length: 0, thickness: 0, layers: [] };\n}\n\n\nfunction deserializeEndgrain(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.endGrain.self) || !Array.isArray(parsedPayload[map.endGrain.self]))\n return [];\n\n return parsedPayload[map.endGrain.self].map(layer =>\n {\n return {\n board: parseIntDef(layer[map.endGrain.board]),\n reversed: layer[map.endGrain.reversed] === true\n };\n });\n}","import { createApp } from 'vue';\nimport App from './App.vue';\nimport store from './store';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faSlidersH, faLayerGroup, faSave, faPrint, faInfoCircle, faTree } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\n\nlibrary.add(faSlidersH, faLayerGroup, faSave, faPrint, faInfoCircle, faTree);\n\ncreateApp(App)\n .use(store)\n .component('font-awesome-icon', FontAwesomeIcon)\n .mount('#app');\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EdgeGrainPreview.vue?vue&type=style&index=0&id=a5fd011a&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Wood.vue?vue&type=style&index=0&id=15338ab0&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CuttingList.vue?vue&type=style&index=0&id=30665a8d&lang=scss&scoped=true\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=1&id=0a5c6a00&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Layers.vue?vue&type=style&index=0&id=342492d6&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Settings.vue?vue&type=style&index=0&id=7067c7c7&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file diff --git a/docs/js/app.a1173833.js b/docs/js/app.a1173833.js deleted file mode 100644 index c578d72..0000000 --- a/docs/js/app.a1173833.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(t){function e(e){for(var r,a,s=e[0],c=e[1],d=e[2],u=0,b=[];u1?(Object(r["k"])(),Object(r["c"])("h2",T,"Board "+Object(r["q"])(e+1),1)):Object(r["d"])("",!0),Object(r["g"])(_,{board:t,scale:1},null,8,["board"])],64)})),256))],2),Object(r["g"])("div",{class:{hideOnPrint:!$.printCuttingList}},[I,Object(r["g"])(F)],2)])],64)})),M=(n("b0c0"),n("8a79"),Object(r["y"])("data-v-7067c7c7"));Object(r["m"])("data-v-7067c7c7");var D={class:"settings"},S=Object(r["g"])("h2",null,"Designer",-1),A=Object(r["g"])("label",{for:"units"},"Units",-1),q=Object(r["g"])("option",{value:"mm"},"Millimeters",-1),U=Object(r["g"])("option",{value:"cm"},"Centimeters",-1),_=Object(r["g"])("option",{value:"inchdecimal"},"Inches (decimal)",-1),F=Object(r["g"])("h2",null,"Tools",-1),H=Object(r["g"])("label",{for:"bladeKerf"},"Blade kerf",-1),K=Object(r["g"])("h2",null,"End grain",-1),R=Object(r["g"])("label",{for:"crosscutWidth"},"Crosscut width",-1);Object(r["l"])();var N=M((function(t,e,n,i,o,a){return Object(r["k"])(),Object(r["c"])("div",D,[S,A,Object(r["g"])("select",{id:"units",value:a.settings.units,onChange:e[1]||(e[1]=function(e){return t.$store.commit("updateSettings",{units:e.target.value})})},[q,U,_],40,["value"]),F,H,Object(r["g"])("input",{id:"bladeKerf",type:"number",value:a.settings.bladeKerf,onChange:e[2]||(e[2]=function(e){return t.$store.commit("updateSettings",{bladeKerf:a.parseFloatDef(e.target.value)})})},null,40,["value"]),K,R,Object(r["g"])("input",{id:"crosscutWidth",type:"number",value:a.settings.crosscutWidth,onChange:e[3]||(e[3]=function(e){return t.$store.commit("updateSettings",{crosscutWidth:a.parseFloatDef(e.target.value)})})},null,40,["value"])])})),V=(n("2b19"),25.4),z=10,X=1,Y={convert:function(t,e,n){var r=this.toMillimeters(t,e);return this.fromMillimeters(r,n)},toPixels:function(t,e){return Math.ceil(this.toMillimeters(t,e)*X)},toMillimeters:function(t,e){switch(e){case"mm":return t;case"cm":return t*z;case"inchdecimal":return t*V}return console.error("Invalid units type: "+e),0},fromMillimeters:function(t,e){switch(e){case"mm":return t;case"cm":return t/z;case"inchdecimal":return t/V}return console.error("Invalid units type: "+e),0},display:function(t,e){var n=this.limitDecimals(t,3);switch(e){case"mm":return n+" mm";case"cm":return n+" cm";case"inchdecimal":return n+" inch"}return console.error("Invalid units type: "+e),n},limitDecimals:function(t,e){var n=Math.pow(10,e);return Math.round(t*n)/n}},J={computed:{settings:function(){return this.$store.state.settings}},methods:{parseFloatDef:function(t){var e=parseFloat(t);return Object.is(e,NaN)?0:e}}};n("e9ae");J.render=N,J.__scopeId="data-v-7067c7c7";var Q=J,Z=Object(r["y"])("data-v-01187e40");Object(r["m"])("data-v-01187e40");var tt={class:"board"},et={class:"name"},nt={class:"boardsettings"},rt=Object(r["g"])("label",{for:"boardLength"},"Board length",-1),it=Object(r["g"])("label",{for:"boardThickness"},"Board thickness",-1),ot={class:"layers"},at=Object(r["e"])('
Tip: click and drag the layer number to move a layer
 Wood speciesWidth ',5),st={class:"remove"},ct={key:0,class:"widthwarning"},dt={class:"add"},lt=Object(r["g"])("h2",null,"Preview settings",-1),ut=Object(r["g"])("label",{for:"borders"}," Show borders",-1),bt=Object(r["g"])("h2",null,"End grain layer direction",-1),ht=Object(r["g"])("label",{for:"directionUniform"}," Uniform",-1),gt=Object(r["g"])("label",{for:"directionAlternate"}," Alternate",-1),ft=Object(r["g"])("label",{for:"directionCustom"}," Custom",-1),Ot={key:0},pt=Object(r["f"])(" Click the strips in the preview to reverse their direction. "),jt={key:0},vt=Object(r["f"])("This may be easier if you "),mt=Object(r["f"])(" the 'Show borders' setting.");Object(r["l"])();var wt=Z((function(t,e,n,i,o,a){return Object(r["k"])(),Object(r["c"])(r["a"],null,[Object(r["g"])("div",tt,[Object(r["g"])("button",{onClick:e[1]||(e[1]=function(){return a.previousBoard&&a.previousBoard.apply(a,arguments)}),disabled:0==o.boardIndex},"<",8,["disabled"]),Object(r["g"])("div",et,"Board "+Object(r["q"])(o.boardIndex+1)+" of "+Object(r["q"])(a.boards.length),1),a.boards.length>1?(Object(r["k"])(),Object(r["c"])("button",{key:0,onClick:e[2]||(e[2]=function(){return a.removeBoard&&a.removeBoard.apply(a,arguments)})},"Remove")):Object(r["d"])("",!0),Object(r["g"])("button",{onClick:e[3]||(e[3]=function(){return a.addBoard&&a.addBoard.apply(a,arguments)})},"Add"),Object(r["g"])("button",{onClick:e[4]||(e[4]=function(){return a.nextBoard&&a.nextBoard.apply(a,arguments)}),disabled:o.boardIndex==a.boards.length-1},">",8,["disabled"])]),null!==a.currentBoard?(Object(r["k"])(),Object(r["c"])(r["a"],{key:0},[Object(r["g"])("div",nt,[rt,Object(r["g"])("input",{id:"boardLength",type:"number",value:a.currentBoard.length,onChange:e[5]||(e[5]=function(e){return t.$store.commit("updateBoard",{board:o.boardIndex,values:{length:a.parseFloatDef(e.target.value)}})})},null,40,["value"]),it,Object(r["g"])("input",{id:"boardThickness",type:"number",value:a.currentBoard.thickness,onChange:e[6]||(e[6]=function(e){return t.$store.commit("updateBoard",{board:o.boardIndex,values:{thickness:a.parseFloatDef(e.target.value)}})})},null,40,["value"])]),Object(r["g"])("div",ot,[at,(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(a.currentBoard.layers,(function(t,e){return Object(r["k"])(),Object(r["c"])(r["a"],null,[Object(r["g"])("div",{class:["index",{dropTargetAbove:o.dropTarget===e,dropTargetBelow:o.dropTarget===a.currentBoard.layers.length&&e===a.currentBoard.layers.length-1}],ref:"layer"+e,onMousedown:Object(r["x"])((function(t){return a.startDrag(e)}),["prevent"])},Object(r["q"])(e+1),43,["onMousedown"]),Object(r["w"])(Object(r["g"])("select",{"onUpdate:modelValue":function(e){return t.wood=e},class:"wood"},[(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(a.wood,(function(t,e){return Object(r["k"])(),Object(r["c"])("option",{value:e},Object(r["q"])(t.name),9,["value"])})),256))],8,["onUpdate:modelValue"]),[[r["s"],t.wood]]),Object(r["g"])("input",{type:"number",class:"width",value:t.width,onInput:function(e){return t.width=a.parseFloatDef(e.target.value)}},null,40,["value","onInput"]),Object(r["g"])("div",st,[Object(r["g"])("button",{onClick:function(t){return a.removeLayer(e)}},"X",8,["onClick"])])],64)})),256)),null!==a.widthWarning?(Object(r["k"])(),Object(r["c"])("div",ct,Object(r["q"])(a.widthWarning),1)):Object(r["d"])("",!0),Object(r["g"])("div",dt,[Object(r["g"])("button",{onClick:e[7]||(e[7]=function(t){return a.addLayer()})},"Add layer")])]),Object(r["g"])("div",null,[lt,Object(r["g"])("input",{id:"borders",type:"checkbox",checked:a.settings.borders,onChange:e[8]||(e[8]=function(e){return t.$store.commit("updateSettings",{borders:e.target.checked})})},null,40,["checked"]),ut]),Object(r["g"])("div",null,[bt,Object(r["g"])("div",null,[Object(r["g"])("input",{id:"directionUniform",type:"radio",checked:"uniform"===a.settings.direction,onChange:e[9]||(e[9]=function(t){return a.setDirection(t,"uniform")})},null,40,["checked"]),ht]),Object(r["g"])("div",null,[Object(r["g"])("input",{id:"directionAlternate",type:"radio",checked:"alternate"===a.settings.direction,onChange:e[10]||(e[10]=function(t){return a.setDirection(t,"alternate")})},null,40,["checked"]),gt]),Object(r["g"])("div",null,[Object(r["g"])("input",{id:"directionCustom",type:"radio",checked:"custom"===a.settings.direction,onChange:e[11]||(e[11]=function(t){return a.setDirection(t,"custom")})},null,40,["checked"]),ft,"custom"===a.settings.direction?(Object(r["k"])(),Object(r["c"])("p",Ot,[pt,a.settings.borders?Object(r["d"])("",!0):(Object(r["k"])(),Object(r["c"])("span",jt,[vt,Object(r["g"])("a",{href:"#",onClick:e[12]||(e[12]=Object(r["x"])((function(e){return t.$store.commit("updateSettings",{borders:!0})}),["prevent"]))},"turn on"),mt]))])):Object(r["d"])("",!0)])])],64)):Object(r["d"])("",!0)],64)})),yt=(n("4160"),n("d81d"),n("13d5"),n("159b"),{data:function(){return{boardIndex:0,dragIndex:null,dropTarget:null}},computed:{settings:function(){return this.$store.state.settings},wood:function(){return this.$store.state.wood},boards:function(){return this.$store.state.boards},currentBoard:function(){return this.boardIndex>=0&&this.boardIndexr)&&(r=a)})),e==r)return null;var i="Your board are not of equal width. The current board is "+Y.display(n,this.settings.units)+" ";return i+=nt?e:t}),0)}},methods:{parseFloatDef:function(t){var e=parseFloat(t);return Object.is(e,NaN)?0:e},previousBoard:function(){this.boardIndex>0&&this.boardIndex--},nextBoard:function(){this.boardIndex=this.boards.length&&(this.boardIndex=this.boards.length-1))},addLayer:function(){this.$store.commit("addLayer",this.boardIndex)},removeLayer:function(t){this.$store.commit("removeLayer",{board:this.boardIndex,layer:t})},startDrag:function(t){var e=this,n=this;n.dragIndex=t,n.dropTarget=t;var r,i=function(t){n.dropTarget=n.getTargetLayer(t.pageY)};r=function(){document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",r),n.dragIndex!==n.dropTarget&&n.$store.commit("moveLayer",{board:e.boardIndex,from:n.dragIndex,to:n.dropTarget}),n.dropTarget=null,n.dragIndex=null},document.addEventListener("mousemove",i),document.addEventListener("mouseup",r)},getTargetLayer:function(t){if(null===this.currentBoard||0==this.currentBoard.layers.length)return null;var e=this.getPageOffsetRect(this.$refs.layer0),n=this.getPageOffsetRect(this.$refs["layer"+(this.currentBoard.layers.length-1)]);if(t<=e.bottom)return 0;if(t>=n.bottom)return this.currentBoard.layers.length;if(t>=n.top)return this.currentBoard.layers.length-1;if(null!==this.dropTarget&&this.dropTarget>0&&this.dropTarget=r.top&&t=o.top&&t1?(Object(r["k"])(),Object(r["c"])("div",St,"Click and drag strips to reorder them. Click once to reverse the direction.")):Object(r["d"])("",!0),(Object(r["k"])(),Object(r["c"])("svg",{width:a.viewportWidth,height:a.viewportHeight,viewBox:a.viewBox,class:{dragging:null!==o.dropTarget}},[Object(r["g"])("defs",null,[(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(a.boards,(function(t,e){return Object(r["k"])(),Object(r["c"])("g",{id:"strip"+e},[(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(t.layers,(function(e,n){return Object(r["k"])(),Object(r["c"])("rect",{width:a.toPixels(t.thickness),height:a.toPixels(e.width),x:"0",y:a.getBoardLayerOffset(t,n),style:a.getBoardLayerStyle(t,n)},null,12,["width","height","y"])})),256))],8,["id"])})),256)),Object(r["g"])("g",At,[Object(r["g"])("line",{x1:"0",y1:"0",x2:"0",y2:a.boardPixelHeight,style:{stroke:"white","stroke-width":"2"}},null,8,["y2"])])]),(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(a.endGrain,(function(t,e){return Object(r["k"])(),Object(r["c"])("use",{ref:"strip"+e,href:"#strip"+t.board,x:a.getLayerOffset(e),y:"0",transform:a.getLayerTransform(e),onMousedown:Object(r["x"])((function(t){return a.mouseDown(e,t)}),["prevent"])},null,40,["href","x","transform","onMousedown"])})),256)),null!==o.dropTarget?(Object(r["k"])(),Object(r["c"])("use",{key:0,href:"#dropTarget",x:a.getLayerOffset(o.dropTarget)},null,8,["x"])):Object(r["d"])("",!0)],10,["width","height","viewBox"]))])})),Ut=(n("a9e3"),{props:{scale:Number},data:function(){return{dragIndex:null,dropTarget:null}},computed:{settings:function(){return this.$store.state.settings},boards:function(){return this.$store.state.boards},wood:function(){return this.$store.state.wood},endGrain:function(){return this.$store.state.endGrain},boardWidth:function(){var t=this;return this.endGrain.map((function(e){return e.board>=0&&e.boardt?e:t}),0)},boardPixelWidth:function(){return this.toPixels(this.boardWidth)},boardPixelHeight:function(){return this.toPixels(this.boardHeight)},viewportWidth:function(){return Math.floor(this.boardPixelWidth*this.scale)},viewportHeight:function(){return Math.floor(this.boardPixelHeight*this.scale)},viewBox:function(){return"0 0 "+this.boardPixelWidth+" "+this.boardPixelHeight}},methods:{toPixels:function(t){return Y.toPixels(t,this.settings.units)},display:function(t){return Y.display(t,this.settings.units)},getBoardLayerOffset:function(t,e){if(e<0||e>=t.layers.length)return 0;for(var n=0,r=0;r=t.layers.length)return"fill: fuchsia";var n=t.layers[e].wood;if(n<0||n>=this.wood.length)return"";var r=this.settings.borders?"; stroke-width: 1; stroke: black":"";return"fill: "+this.wood[n].color+r},getLayerOffset:function(t){if(t<0||t>this.endGrain.length)return 0;for(var e=0,n=0;n=0&&r=0&&t=this.endGrain.length||(this.endGrain[t].reversed=!this.endGrain[t].reversed))},mouseDown:function(t,e){var n,r=this,i=e.pageX,o=!1,a=function(e){o||Math.abs(e.pageX-i)>=5&&(r.dragIndex=t,o=!0),o&&(r.dropTarget=r.getTargetStrip(e.pageX))};n=function(){document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",n),o?(r.dragIndex!==r.dropTarget&&r.$store.commit("moveEndgrain",{from:r.dragIndex,to:r.dropTarget}),r.dropTarget=null,r.dragIndex=null):r.reverseLayer(t)},document.addEventListener("mousemove",a),document.addEventListener("mouseup",n)},getTargetStrip:function(t){if(0==this.endGrain.length)return null;var e=this.getPageOffsetRect(this.$refs.strip0),n=this.getPageOffsetRect(this.$refs["strip"+(this.endGrain.length-1)]);if(t<=e.right)return 0;if(t>=n.right)return this.endGrain.length;if(t>=n.left)return this.endGrain.length-1;if(null!==this.dropTarget&&this.dropTarget>0&&this.dropTarget=r.left&&t=o.left&&t=this.layers.length)return 0;for(var e=0,n=0;n=this.layers.length)return"fill: fuchsia";var e=this.layers[t].wood;if(e<0||e>=this.wood.length)return"";var n=this.settings.borders?"; stroke-width: 1; stroke: black":"";return"fill: "+this.wood[e].color+n}}};n("6dfb");Nt.render=Rt,Nt.__scopeId="data-v-a5fd011a";var Vt=Nt,zt=Object(r["y"])("data-v-30665a8d");Object(r["m"])("data-v-30665a8d");var Xt={class:"list"},Yt=Object(r["g"])("tr",null,[Object(r["g"])("th",null,"Layer"),Object(r["g"])("th",null,"Wood species"),Object(r["g"])("th",{class:"dimension"},"Width")],-1),Jt={key:0,class:"board"},Qt={colspan:"3"},Zt={class:"dimension"},te=Object(r["g"])("h2",null,"Bill of materials",-1),ee={class:"list"},ne=Object(r["g"])("tr",null,[Object(r["g"])("th",null,"Wood species"),Object(r["g"])("th",{class:"dimension"},"Length"),Object(r["g"])("th",{class:"dimension"},"Width"),Object(r["g"])("th",{class:"dimension"},"Thickness")],-1),re={key:0,class:"board"},ie={colspan:"3"},oe={class:"dimension"},ae={class:"dimension"},se={class:"dimension"};Object(r["l"])();var ce=zt((function(t,e,n,i,o,a){return Object(r["k"])(),Object(r["c"])(r["a"],null,[Object(r["g"])("table",Xt,[Yt,(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(a.boards,(function(t,e){return Object(r["k"])(),Object(r["c"])(r["a"],null,[a.boards.length>1?(Object(r["k"])(),Object(r["c"])("tr",Jt,[Object(r["g"])("td",Qt,"Board "+Object(r["q"])(e+1),1)])):Object(r["d"])("",!0),(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(t.layers,(function(e,n){return Object(r["k"])(),Object(r["c"])("tr",null,[Object(r["g"])("td",null,Object(r["q"])(n+1),1),Object(r["g"])("td",null,Object(r["q"])(a.getLayerWood(t,n)),1),Object(r["g"])("td",Zt,Object(r["q"])(a.getLayerWidth(t,n)),1)])})),256))],64)})),256))]),te,Object(r["g"])("table",ee,[ne,(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(a.bom,(function(t,e){return Object(r["k"])(),Object(r["c"])(r["a"],null,[a.bom.length>1?(Object(r["k"])(),Object(r["c"])("tr",re,[Object(r["g"])("td",ie,"Board "+Object(r["q"])(e+1),1)])):Object(r["d"])("",!0),(Object(r["k"])(!0),Object(r["c"])(r["a"],null,Object(r["o"])(t,(function(t){return Object(r["k"])(),Object(r["c"])("tr",null,[Object(r["g"])("td",null,Object(r["q"])(t.woodName),1),Object(r["g"])("td",oe,Object(r["q"])(a.display(t.length)),1),Object(r["g"])("td",ae,Object(r["q"])(a.display(t.width)),1),Object(r["g"])("td",se,Object(r["q"])(a.display(t.thickness)),1)])})),256))],64)})),256))])],64)})),de={computed:{settings:function(){return this.$store.state.settings},boards:function(){return this.$store.state.boards},wood:function(){return this.$store.state.wood},bom:function(){var t=this;return t.boards.map((function(e,n){var r=[],i={};for(var o in e.layers.forEach((function(e){i.hasOwnProperty(e.wood)?i[e.wood]+=e.width+t.settings.bladeKerf:i[e.wood]=e.width})),i)i.hasOwnProperty(o)&&r.push({board:n,woodName:o>=0&&o=t.layers.length)return"";var n=t.layers[e].wood;return n<0||n>=this.wood.length?"":this.wood[n].name},getLayerWidth:function(t,e){return e<0||e>=t.layers.length?"":this.display(t.layers[e].width)},display:function(t){return Y.display(t,this.settings.units)}}};n("978e");de.render=ce,de.__scopeId="data-v-30665a8d";var le=de,ue=n("21a6"),be=(n("c975"),n("d3b7"),n("5cc6"),n("9a8c"),n("a975"),n("735e"),n("c1ac"),n("d139"),n("3a7b"),n("d5d6"),n("82f8"),n("e91f"),n("60bd"),n("5f96"),n("3280"),n("3fcc"),n("ca91"),n("25a1"),n("cd26"),n("3c5d"),n("2954"),n("649e"),n("219c"),n("170b"),n("b39a"),n("72f7"),["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"]),he=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function ge(t){if(t>=he.length)throw new Error("Unable to parse base64 string.");var e=he[t];if(255===e)throw new Error("Unable to parse base64 string.");return e}function fe(t){var e,n="",r=t.length;for(e=2;e>2],n+=be[(3&t[e-2])<<4|t[e-1]>>4],n+=be[(15&t[e-1])<<2|t[e]>>6],n+=be[63&t[e]];return e===r+1&&(n+=be[t[e-2]>>2],n+=be[(3&t[e-2])<<4],n+="=="),e===r&&(n+=be[t[e-2]>>2],n+=be[(3&t[e-2])<<4|t[e-1]>>4],n+=be[(15&t[e-1])<<2],n+="="),n}function Oe(t){if(t.length%4!==0)throw new Error("Unable to parse base64 string.");var e=t.indexOf("=");if(-1!==e&&e>16,o[s+1]=n>>8&255,o[s+2]=255&n;return o.subarray(0,o.length-r)}var pe={name:"App",components:{EndGrainPreview:_t,EdgeGrainPreview:Vt,Settings:Q,Layers:kt,Wood:It,CuttingList:le},data:function(){return{tab:"settings",saveFilename:"My cutting board",printEdgeGrain:!0,printEndGrain:!0,printCuttingList:!0}},created:function(){var t=this,e=function(){if(location.hash){var e=location.hash.substring(1);try{var n=Oe(e);n&&t.$store.commit("loadMsgPack",n)}catch(r){console.error(r)}}};e(),window.addEventListener("hashchange",(function(){e()}))},computed:{boards:function(){return this.$store.state.boards},hash:function(){return fe(this.$store.getters.saveMsgPack)}},methods:{save:function(){var t=this.$store.getters.save,e=new Blob([t],{type:"text/plain; charset=utf-8"});Object(ue["saveAs"])(e,this.saveFilename+".json")},load:function(){var t=this,e=this.$refs.loadFile.files[0];if(e){this.saveFilename=e.name.toLowerCase().endsWith(".json")?e.name.substring(0,e.name.length-5):e.name;var n=new FileReader;n.addEventListener("load",(function(e){t.$store.commit("load",e.target.result)})),n.readAsBinaryString(e)}},print:function(){window.print()}},watch:{hash:function(t){history.replaceState({},"","#"+t)}}};n("6dc0"),n("20ec");pe.render=$,pe.__scopeId="data-v-5bc914fd";var je=pe,ve=(n("a434"),n("ddb0"),n("5502")),me={mm:"mm",cm:"cm",inchdecimal:"inchdecimal",isValid:function(t){switch(t){case me.mm:case me.cm:case me.inchdecimal:return!0;default:return!1}}},we={uniform:"uniform",alternate:"alternate",custom:"custom",isValid:function(t){switch(t){case we.uniform:case we.alternate:case we.custom:return t;default:return we.uniform}}},ye=n("d8b3");function ke(){return{units:me.cm,borders:!1,bladeKerf:.35,crosscutWidth:3,direction:we.alternate}}function xe(){return[{name:"Walnut",color:"#58443f"},{name:"Maple",color:"#f2e0aa"},{name:"Cherry",color:"#bb8359"},{name:"Mahogany",color:"#98473f"},{name:"Yellowheart",color:"#ffff84"},{name:"White oak",color:"#fdf4b9"},{name:"Bubinga",color:"#7e3c34"},{name:"Jatoba",color:"#9b281c"},{name:"Padouk",color:"#933350"}]}function Pe(){return[{thickness:2,length:70,layers:[{wood:8,width:1},{wood:1,width:1.5},{wood:8,width:2},{wood:1,width:2},{wood:8,width:15},{wood:1,width:2},{wood:8,width:1.5},{wood:1,width:1}]}]}function Le(){var t=ke(),e=Pe(),n=[];return Ce(n,t,e),n}var Be=Object(ve["a"])({state:{settings:ke(),wood:xe(),boards:Pe(),endGrain:Le()},mutations:{addLayer:function(t,e){e<0||e>=t.boards.length||t.boards[e].layers.push({wood:0,width:Y.fromMillimeters(20,t.settings.units)})},removeLayer:function(t,e){if(!(e.board<0||e.board>=t.boards.length)){var n=t.boards[e.board];e.layer<0||e.layer>=n.layers.length||n.layers.splice(e.layer,1)}},moveLayer:function(t,e){if(!(e.board<0||e.board>=t.boards.length)){var n=t.boards[e.board];We(n.layers,e.from,e.to)}},addWood:function(t){t.wood.push({name:"Wood #"+(t.wood.length+1),color:"#f2e0aa"})},removeWood:function(t,e){e<0||e>=t.wood.length||(t.boards.forEach((function(t){t.layers.forEach((function(t){t.wood===e?t.wood=-1:t.wood>e&&t.wood--}))})),t.wood.splice(e,1))},updateSettings:function(t,e){var n=t.settings.units;Ge(e,t.settings),n!==t.settings.units&&(t.settings.bladeKerf=Y.limitDecimals(Y.convert(t.settings.bladeKerf,n,t.settings.units),3),t.settings.crosscutWidth=Y.limitDecimals(Y.convert(t.settings.crosscutWidth,n,t.settings.units),3),t.boards.forEach((function(e){e.thickness=Y.limitDecimals(Y.convert(e.thickness,n,t.settings.units),3),e.length=Y.limitDecimals(Y.convert(e.length,n,t.settings.units),3),e.layers.forEach((function(e){e.width=Y.limitDecimals(Y.convert(e.width,n,t.settings.units),3)}))})))},addBoard:function(t,e){if(e<0||e>=t.boards.length)t.boards.push({thickness:2,length:70,layers:[]});else{var n=t.boards[e];t.boards.push({thickness:n.thickness,length:n.length,layers:n.layers.map((function(t){return{wood:t.wood,width:t.width}}))}),Ce(t.endGrain,t.settings,t.boards)}},removeBoard:function(t,e){e<0||e>=t.boards.length||(t.boards.splice(e,1),t.endGrain.forEach((function(t){t.board==e?t.board=-1:t.board>e&&t.board--})),Ce(t.endGrain,t.settings,t.boards))},updateBoard:function(t,e){if(!(e.board<0||e.board>=t.boards.length)){var n=t.boards[e.board],r=n.length;Ge(e.values,n),r!==n.length&&Ce(t.endGrain,t.settings,t.boards)}},moveEndgrain:function(t,e){We(t.endGrain,e.from,e.to)},load:function(t,e){var n=JSON.parse(e);Ie(t,n)},loadMsgPack:function(t,e){try{var n=Object(ye["deserialize"])(e);n&&Ie(t,n)}catch(r){console.error(r)}}},getters:{save:function(t){var e=De(t,!1);return JSON.stringify(e)},saveMsgPack:function(t){var e=De(t,!0);return Object(ye["serialize"])(e)}}});function We(t,e,n){if(!(e<0||e>=t.length)&&!(n<0||n>t.length))if(n==t.length)t.push(t[e]),t.splice(e,1);else{var r=t[e];t.splice(e,1),n>e&&n--,t.splice(n,0,r)}}function Ce(t,e,n){for(var r=[],i=0;i=0&&t.board=o,i&&(r[t.board]-=o)),i||a.push(e)}));for(var s=a.length-1;s>=0;s--)t.splice(a[s],1);r.forEach((function(e,n){while(e>=o)t.push({board:n,reversed:!1}),e-=o,e=Y.limitDecimals(e,3)}))}function Ge(t,e){for(var n in t)t.hasOwnProperty(n)&&e.hasOwnProperty(n)&&(e[n]=t[n])}function Ee(t){var e=parseFloat(t);return isNaN(e)?0:e}function Te(t){var e=parseInt(t);return isNaN(e)?0:e}function Ie(t,e){var n=_e(e);Ge(n.settings,t.settings),t.wood=n.wood,t.boards=n.boards,t.endGrain=n.endGrain,Ce(t.endGrain,t.settings,t.boards)}var $e={settings:{self:"settings",units:"units",borders:"borders",bladeKerf:"bladeKerf",crosscutWidth:"crosscutWidth",direction:"direction"},wood:{self:"wood",name:"name",color:"color"},boards:{self:"boards",thickness:"thickness",length:"length",layers:{self:"layers",wood:"wood",width:"width"}},endGrain:{self:"endGrain",board:"board",reversed:"reversed"}},Me={settings:{self:"s",units:"u",borders:"b",bladeKerf:"k",crosscutWidth:"c",direction:"d"},wood:{self:"w",name:"n",color:"c"},boards:{self:"b",thickness:"t",length:"x",layers:{self:"l",wood:"w",width:"x"}},endGrain:{self:"e",board:"b",reversed:"r"}};function De(t,e){var n=e?Me:$e,r={};return r[n.settings.self]=Se(t.settings,n),r[n.wood.self]=Ae(t.wood,n),r[n.boards.self]=qe(t.boards,n),r[n.endGrain.self]=Ue(t.endGrain,n),r}function Se(t,e){var n={};return n[e.settings.units]=t.units,n[e.settings.borders]=t.borders,n[e.settings.bladeKerf]=t.bladeKerf,n[e.settings.crosscutWidth]=t.crosscutWidth,n[e.settings.direction]=t.direction,n}function Ae(t,e){return 0===t.length?[]:t.map((function(t){var n={};return n[e.wood.name]=t.name,n[e.wood.color]=t.color,n}))}function qe(t,e){return t.map((function(t){var n={};return n[e.boards.length]=t.length,n[e.boards.thickness]=t.thickness,n[e.boards.layers.self]=t.layers.map((function(t){var n={};return n[e.boards.layers.wood]=t.wood,n[e.boards.layers.width]=t.width,n})),n}))}function Ue(t,e){return t.map((function(t){var n={};return n[e.endGrain.board]=t.board,n[e.endGrain.reversed]=t.reversed,n}))}function _e(t){var e=t.hasOwnProperty(Me.settings.self)?Me:$e,n={settings:Fe(t,e),wood:He(t,e),boards:Ke(t,e),endGrain:Re(t,e)};return t.hasOwnProperty("settings")&&(t.settings.hasOwnProperty("alternateDirection")&&(n.settings.direction=t.settings.alternateDirection?we.alternate:we.uniform),t.settings.hasOwnProperty("boardLength")&&(n.boards[0].length=Ee(t.settings.boardLength)),t.settings.hasOwnProperty("boardThickness")&&(n.boards[0].thickness=Ee(t.settings.boardThickness))),0===n.endGrain.length&&Ce(n.endGrain,n.settings,n.boards),n}function Fe(t,e){if(!t.hasOwnProperty(e.settings.self))return ke();var n=t[e.settings.self];return{units:me.isValid(n[e.settings.units])?n[e.settings.units]:me.cm,borders:!0===n[e.settings.borders],bladeKerf:Ee(n[e.settings.bladeKerf]),crosscutWidth:Ee(n[e.settings.crosscutWidth]),direction:we.isValid(n[e.settings.direction])?n[e.settings.direction]:we.uniform}}function He(t,e){return t.hasOwnProperty(e.wood.self)&&Array.isArray(t[e.wood.self])?t[e.wood.self].map((function(t){return{name:t[e.wood.name],color:/^#[0-9A-F]{6}$/i.test(t[e.wood.color]||"")?t[e.wood.color]:"#000000"}})):[]}function Ke(t,e){if(!t.hasOwnProperty(e.boards.self)||!Array.isArray(t[e.boards.self]))return[];var n=t[e.boards.self].map((function(t){var n={thickness:Ee(t[e.boards.thickness]),length:Ee(t[e.boards.length]),layers:[]};return t.hasOwnProperty(e.boards.layers.self)&&Array.isArray(t[e.boards.layers.self])&&(n.layers=t[e.boards.layers.self].map((function(t){return{wood:Te(t[e.boards.layers.wood]),width:Ee(t[e.boards.layers.width])}}))),n}));return n.length>0?n:{length:0,thickness:0,layers:[]}}function Re(t,e){return t.hasOwnProperty(e.endGrain.self)&&Array.isArray(t[e.endGrain.self])?t[e.endGrain.self].map((function(t){return{board:Te(t[e.endGrain.board]),reversed:!0===t[e.endGrain.reversed]}})):[]}var Ne=n("ecee"),Ve=n("c074"),ze=n("ad3d");Ne["c"].add(Ve["e"],Ve["b"],Ve["d"],Ve["c"],Ve["a"],Ve["f"]),Object(r["b"])(je).use(Be).component("font-awesome-icon",ze["a"]).mount("#app")},"6dc0":function(t,e,n){"use strict";n("43c8")},"6dfb":function(t,e,n){"use strict";n("1cce")},"8b67":function(t,e,n){"use strict";n("c355")},9279:function(t,e,n){"use strict";n("d7cc")},"978e":function(t,e,n){"use strict";n("bfd1")},"9e1e":function(t,e,n){},bfd1:function(t,e,n){},c355:function(t,e,n){},d106:function(t,e,n){},d7cc:function(t,e,n){},e909:function(t,e,n){"use strict";n("d106")},e9ae:function(t,e,n){"use strict";n("9e1e")},f248:function(t,e,n){}}); -//# sourceMappingURL=app.a1173833.js.map \ No newline at end of file diff --git a/docs/js/app.a1173833.js.map b/docs/js/app.a1173833.js.map deleted file mode 100644 index ba53b97..0000000 --- a/docs/js/app.a1173833.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?8e57","webpack:///./src/App.vue","webpack:///./src/components/Settings.vue","webpack:///./src/lib/units.js","webpack:///./src/components/Settings.vue?b32f","webpack:///./src/components/Layers.vue","webpack:///./src/components/Layers.vue?f1ba","webpack:///./src/components/Wood.vue","webpack:///./src/components/Wood.vue?85c2","webpack:///./src/components/EndGrainPreview.vue","webpack:///./src/components/EndGrainPreview.vue?ab3d","webpack:///./src/components/EdgeGrainPreview.vue","webpack:///./src/components/EdgeGrainPreview.vue?0ca3","webpack:///./src/components/CuttingList.vue","webpack:///./src/components/CuttingList.vue?203c","webpack:///./src/lib/base64.js","webpack:///./src/App.vue?eabf","webpack:///./src/lib/enums.js","webpack:///./src/store.js","webpack:///./src/main.js","webpack:///./src/App.vue?61d6","webpack:///./src/components/EdgeGrainPreview.vue?d87f","webpack:///./src/components/Wood.vue?9d37","webpack:///./src/components/EndGrainPreview.vue?e4bc","webpack:///./src/components/CuttingList.vue?ff1d","webpack:///./src/components/Layers.vue?10ca","webpack:///./src/components/Settings.vue?cedc"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","class","for","type","ref","accept","href","target","tab","icon","size","fixed-width","printEndGrain","id","printEdgeGrain","printCuttingList","print","saveFilename","save","load","scale","boards","board","boardIndex","settings","units","$store","commit","$event","bladeKerf","parseFloatDef","crosscutWidth","millimetersPerInch","millimetersPerCentimeter","pixelsPerMillimeter","convert","fromUnits","toUnits","millimeters","this","toMillimeters","fromMillimeters","toPixels","Math","ceil","console","error","display","displayValue","limitDecimals","decimals","power","pow","round","computed","state","methods","parsedValue","parseFloat","is","NaN","render","__scopeId","previousBoard","disabled","removeBoard","addBoard","nextBoard","currentBoard","thickness","layers","layer","index","dropTarget","startDrag","wood","item","width","removeLayer","widthWarning","addLayer","checked","borders","direction","setDirection","dragIndex","self","minWidth","currentWidth","maxWidth","forEach","boardWidth","map","reduce","accumulator","currentValue","message","maxBoardWidth","dragMouseMove","event","getTargetLayer","pageY","document","removeEventListener","from","to","addEventListener","yPos","firstLayer","getPageOffsetRect","$refs","layer0","lastLayer","bottom","top","currentTarget","testTarget","element","clientRect","getBoundingClientRect","scrollLeft","pageXOffset","documentElement","scrollTop","pageYOffset","left","right","color","removeWood","addWood","boardHeight","viewportWidth","height","viewportHeight","viewBox","x","y","getBoardLayerOffset","style","getBoardLayerStyle","x1","y1","x2","y2","boardPixelHeight","endGrain","getLayerOffset","transform","getLayerTransform","mouseDown","props","Number","boardPixelWidth","floor","offset","woodIndex","borderStyle","reversed","reverseLayer","startX","pageX","dragging","moveEvent","abs","getTargetStrip","xPos","firstStrip","strip0","lastStrip","getLayerStyle","colspan","getLayerWood","getLayerWidth","bom","stock","woodName","woodTally","base64abc","base64codes","getBase64Code","charCode","Error","code","bytesToBase64","bytes","base64ToBytes","str","indexOf","buffer","missingOctets","endsWith","Uint8Array","charCodeAt","subarray","components","EndGrainPreview","EdgeGrainPreview","Settings","Layers","Wood","CuttingList","created","checkHash","location","hash","substring","decoded","e","getters","saveMsgPack","blob","Blob","loadFile","files","toLowerCase","reader","FileReader","readAsBinaryString","watch","newValue","history","replaceState","UnitsEnum","mm","cm","inchdecimal","DirectionEnum","uniform","alternate","custom","DefaultSettings","DefaultWood","DefaultBoards","DefaultEndGrain","updateEndGrain","createStore","mutations","payload","moveLayer","moveArrayItem","updateSettings","oldUnits","mergeObject","copyFrom","source","updateBoard","oldLength","values","moveEndgrain","parsedPayload","JSON","parse","loadObject","loadMsgPack","deserialize","serialized","serializeState","stringify","serialize","array","boardTally","cutWidth","remove","boardAvailable","remaining","isNaN","parseIntDef","parseInt","deserialized","deserializeState","SettingsNameMapJSON","SettingsNameMapMsgPack","messagePack","serializeSettings","serializeWood","serializeBoards","serializeEndgrain","boardResult","layerResult","deserializeSettings","deserializeWood","deserializeBoards","deserializeEndgrain","alternateDirection","boardLength","boardThickness","isValid","Array","isArray","test","library","add","faSlidersH","faLayerGroup","faSave","faPrint","faInfoCircle","faTree","createApp","App","use","store","component","FontAwesomeIcon","mount"],"mappings":"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","file":"js/app.a1173833.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=1&id=5bc914fd&lang=scss&scoped=true\"","\n\n\n\n\n\n\n","\r\n\r\n\r\n\r\n","const millimetersPerInch = 25.4;\r\nconst millimetersPerCentimeter = 10;\r\nconst pixelsPerMillimeter = 1;\r\n\r\n\r\n\r\nconst units = {\r\n convert(value, fromUnits, toUnits)\r\n {\r\n const millimeters = this.toMillimeters(value, fromUnits);\r\n return this.fromMillimeters(millimeters, toUnits);\r\n },\r\n\r\n\r\n toPixels(value, units)\r\n {\r\n return Math.ceil(this.toMillimeters(value, units) * pixelsPerMillimeter);\r\n },\r\n\r\n\r\n toMillimeters(value, units)\r\n {\r\n switch (units)\r\n {\r\n case 'mm': return value;\r\n case 'cm': return value * millimetersPerCentimeter;\r\n case 'inchdecimal': return value * millimetersPerInch;\r\n }\r\n\r\n console.error('Invalid units type: ' + units);\r\n return 0;\r\n },\r\n\r\n\r\n fromMillimeters(value, units)\r\n {\r\n switch (units)\r\n {\r\n case 'mm': return value;\r\n case 'cm': return value / millimetersPerCentimeter;\r\n case 'inchdecimal': return value / millimetersPerInch;\r\n }\r\n\r\n console.error('Invalid units type: ' + units);\r\n return 0;\r\n },\r\n\r\n\r\n display(value, units)\r\n {\r\n const displayValue = this.limitDecimals(value, 3);\r\n\r\n switch (units)\r\n {\r\n case 'mm': return displayValue + ' mm';\r\n case 'cm': return displayValue + ' cm';\r\n case 'inchdecimal': return displayValue + ' inch';\r\n }\r\n\r\n console.error('Invalid units type: ' + units);\r\n return displayValue;\r\n },\r\n\r\n\r\n limitDecimals(value, decimals)\r\n {\r\n // toFixed turns it into a string and pads it with zeroes\r\n const power = Math.pow(10, decimals);\r\n return Math.round(value * power) / power;\r\n }\r\n};\r\n\r\n\r\nexport { units }","import { render } from \"./Settings.vue?vue&type=template&id=7067c7c7&scoped=true\"\nimport script from \"./Settings.vue?vue&type=script&lang=js\"\nexport * from \"./Settings.vue?vue&type=script&lang=js\"\n\nimport \"./Settings.vue?vue&type=style&index=0&id=7067c7c7&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7067c7c7\"\n\nexport default script","\r\n\r\n\r\n\r\n","import { render } from \"./Layers.vue?vue&type=template&id=01187e40&scoped=true\"\nimport script from \"./Layers.vue?vue&type=script&lang=js\"\nexport * from \"./Layers.vue?vue&type=script&lang=js\"\n\nimport \"./Layers.vue?vue&type=style&index=0&id=01187e40&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-01187e40\"\n\nexport default script","\r\n\r\n\r\n\r\n","import { render } from \"./Wood.vue?vue&type=template&id=15338ab0&scoped=true\"\nimport script from \"./Wood.vue?vue&type=script&lang=js\"\nexport * from \"./Wood.vue?vue&type=script&lang=js\"\n\nimport \"./Wood.vue?vue&type=style&index=0&id=15338ab0&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-15338ab0\"\n\nexport default script","\n\n\n\n","import { render } from \"./EndGrainPreview.vue?vue&type=template&id=61e0967d&scoped=true\"\nimport script from \"./EndGrainPreview.vue?vue&type=script&lang=js\"\nexport * from \"./EndGrainPreview.vue?vue&type=script&lang=js\"\n\nimport \"./EndGrainPreview.vue?vue&type=style&index=0&id=61e0967d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-61e0967d\"\n\nexport default script","\n\n\n\n","import { render } from \"./EdgeGrainPreview.vue?vue&type=template&id=a5fd011a&scoped=true\"\nimport script from \"./EdgeGrainPreview.vue?vue&type=script&lang=js\"\nexport * from \"./EdgeGrainPreview.vue?vue&type=script&lang=js\"\n\nimport \"./EdgeGrainPreview.vue?vue&type=style&index=0&id=a5fd011a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a5fd011a\"\n\nexport default script","\r\n\r\n\r\n\r\n","import { render } from \"./CuttingList.vue?vue&type=template&id=30665a8d&scoped=true\"\nimport script from \"./CuttingList.vue?vue&type=script&lang=js\"\nexport * from \"./CuttingList.vue?vue&type=script&lang=js\"\n\nimport \"./CuttingList.vue?vue&type=style&index=0&id=30665a8d&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-30665a8d\"\n\nexport default script","/*\r\nMIT License\r\nCopyright (c) 2020 Egor Nepomnyaschih\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n*/\r\n\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst base64abc = [],\r\n A = \"A\".charCodeAt(0),\r\n a = \"a\".charCodeAt(0),\r\n n = \"0\".charCodeAt(0);\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(A + i));\r\n}\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(a + i));\r\n}\r\nfor (let i = 0; i < 10; ++i) {\r\n base64abc.push(String.fromCharCode(n + i));\r\n}\r\nbase64abc.push(\"+\");\r\nbase64abc.push(\"/\");\r\n*/\r\nconst base64abc = [\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\",\r\n \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\",\r\n \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\",\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"+\", \"/\"\r\n];\r\n\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst l = 256, base64codes = new Uint8Array(l);\r\nfor (let i = 0; i < l; ++i) {\r\n base64codes[i] = 255; // invalid character\r\n}\r\nbase64abc.forEach((char, index) => {\r\n base64codes[char.charCodeAt(0)] = index;\r\n});\r\nbase64codes[\"=\".charCodeAt(0)] = 0; // ignored anyway, so we just need to prevent an error\r\n*/\r\nconst base64codes = [\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,\r\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255,\r\n 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\r\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,\r\n 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\r\n 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\r\n];\r\n\r\nfunction getBase64Code(charCode) {\r\n if (charCode >= base64codes.length) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const code = base64codes[charCode];\r\n if (code === 255) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n return code;\r\n}\r\n\r\nexport function bytesToBase64(bytes) {\r\n let result = '', i, l = bytes.length;\r\n for (i = 2; i < l; i += 3) {\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[((bytes[i - 1] & 0x0F) << 2) | (bytes[i] >> 6)];\r\n result += base64abc[bytes[i] & 0x3F];\r\n }\r\n if (i === l + 1) { // 1 octet yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[(bytes[i - 2] & 0x03) << 4];\r\n result += \"==\";\r\n }\r\n if (i === l) { // 2 octets yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[(bytes[i - 1] & 0x0F) << 2];\r\n result += \"=\";\r\n }\r\n return result;\r\n}\r\n\r\nexport function base64ToBytes(str) {\r\n if (str.length % 4 !== 0) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const index = str.indexOf(\"=\");\r\n if (index !== -1 && index < str.length - 2) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0,\r\n n = str.length,\r\n result = new Uint8Array(3 * (n / 4)),\r\n buffer;\r\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\r\n buffer =\r\n getBase64Code(str.charCodeAt(i)) << 18 |\r\n getBase64Code(str.charCodeAt(i + 1)) << 12 |\r\n getBase64Code(str.charCodeAt(i + 2)) << 6 |\r\n getBase64Code(str.charCodeAt(i + 3));\r\n result[j] = buffer >> 16;\r\n result[j + 1] = (buffer >> 8) & 0xFF;\r\n result[j + 2] = buffer & 0xFF;\r\n }\r\n return result.subarray(0, result.length - missingOctets);\r\n}\r\n\r\nexport function base64encode(str, encoder = new TextEncoder()) {\r\n return bytesToBase64(encoder.encode(str));\r\n}\r\n\r\nexport function base64decode(str, decoder = new TextDecoder()) {\r\n return decoder.decode(base64ToBytes(str));\r\n}","import { render } from \"./App.vue?vue&type=template&id=5bc914fd&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=5bc914fd&lang=scss\"\nimport \"./App.vue?vue&type=style&index=1&id=5bc914fd&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5bc914fd\"\n\nexport default script","const UnitsEnum = {\r\n mm: 'mm',\r\n cm: 'cm',\r\n inchdecimal: 'inchdecimal',\r\n //inchfractional: 'inchfractional'\r\n};\r\n\r\n\r\nUnitsEnum.isValid = (value) =>\r\n{\r\n switch (value)\r\n {\r\n case UnitsEnum.mm:\r\n case UnitsEnum.cm:\r\n case UnitsEnum.inchdecimal:\r\n //case UnitsEnum.inchfractional:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n};\r\n\r\n\r\nconst DirectionEnum = {\r\n uniform: 'uniform',\r\n alternate: 'alternate',\r\n custom: 'custom'\r\n};\r\n\r\n\r\nDirectionEnum.isValid = (value) =>\r\n{\r\n switch (value)\r\n {\r\n case DirectionEnum.uniform:\r\n case DirectionEnum.alternate:\r\n case DirectionEnum.custom:\r\n return value;\r\n\r\n default:\r\n return DirectionEnum.uniform;\r\n }\r\n};\r\n\r\n\r\nexport {\r\n UnitsEnum,\r\n DirectionEnum\r\n}","import { createStore } from 'vuex';\nimport { units } from './lib/units';\nimport { UnitsEnum, DirectionEnum } from './lib/enums';\n\nimport { serialize, deserialize } from '@ygoe/msgpack';\n\n\n\nfunction DefaultSettings()\n{\n return {\n units: UnitsEnum.cm,\n borders: false,\n bladeKerf: 0.35,\n crosscutWidth: 3,\n direction: DirectionEnum.alternate\n };\n}\n\n\nfunction DefaultWood()\n{\n return [\n { name: 'Walnut', color: '#58443f' },\n { name: 'Maple', color: '#f2e0aa' },\n { name: 'Cherry', color: '#bb8359' },\n { name: 'Mahogany', color: '#98473f' },\n { name: 'Yellowheart', color: '#ffff84' },\n { name: 'White oak', color: '#fdf4b9' },\n { name: 'Bubinga', color: '#7e3c34' },\n { name: 'Jatoba', color: '#9b281c' },\n { name: 'Padouk', color: '#933350' }\n ];\n}\n\n\nfunction DefaultBoards()\n{\n return [\n {\n thickness: 2,\n length: 70,\n\n layers: [\n { wood: 8, width: 1 },\n { wood: 1, width: 1.5 },\n { wood: 8, width: 2 },\n { wood: 1, width: 2 },\n { wood: 8, width: 15 },\n { wood: 1, width: 2 },\n { wood: 8, width: 1.5 },\n { wood: 1, width: 1 }\n ]\n }\n ];\n}\n\n\nfunction DefaultEndGrain()\n{\n const settings = DefaultSettings();\n const boards = DefaultBoards();\n const result = [];\n\n updateEndGrain(result, settings, boards);\n\n return result;\n}\n\n\nexport default createStore({\n state: {\n settings: DefaultSettings(),\n wood: DefaultWood(),\n boards: DefaultBoards(),\n endGrain: DefaultEndGrain()\n },\n\n mutations: {\n addLayer(state, board)\n {\n if (board < 0 || board >= state.boards.length)\n return;\n\n state.boards[board].layers.push({\n wood: 0,\n width: units.fromMillimeters(20, state.settings.units)\n });\n },\n\n removeLayer(state, payload)\n {\n if (payload.board < 0 || payload.board >= state.boards.length)\n return;\n\n const board = state.boards[payload.board];\n\n if (payload.layer < 0 || payload.layer >= board.layers.length)\n return;\n\n board.layers.splice(payload.layer, 1);\n },\n\n moveLayer(state, payload)\n {\n if (payload.board < 0 || payload.board >= state.boards.length)\n return;\n\n const board = state.boards[payload.board];\n moveArrayItem(board.layers, payload.from, payload.to);\n },\n\n\n addWood(state)\n {\n state.wood.push({\n name: 'Wood #' + (state.wood.length + 1),\n color: '#f2e0aa'\n });\n },\n\n removeWood(state, index)\n {\n if (index < 0 || index >= state.wood.length)\n return;\n\n // Update all layers\n state.boards.forEach(board =>\n {\n board.layers.forEach(layer =>\n {\n if (layer.wood === index)\n layer.wood = -1\n else if (layer.wood > index)\n layer.wood--;\n });\n });\n\n state.wood.splice(index, 1);\n },\n\n\n updateSettings(state, payload)\n {\n const oldUnits = state.settings.units;\n mergeObject(payload, state.settings);\n\n if (oldUnits !== state.settings.units)\n {\n // Convert the settings\n state.settings.bladeKerf = units.limitDecimals(units.convert(state.settings.bladeKerf, oldUnits, state.settings.units), 3);\n state.settings.crosscutWidth = units.limitDecimals(units.convert(state.settings.crosscutWidth, oldUnits, state.settings.units), 3);\n\n // Convert the boards\n state.boards.forEach(board =>\n {\n board.thickness = units.limitDecimals(units.convert(board.thickness, oldUnits, state.settings.units), 3);\n board.length = units.limitDecimals(units.convert(board.length, oldUnits, state.settings.units), 3);\n\n board.layers.forEach(layer =>\n {\n layer.width = units.limitDecimals(units.convert(layer.width, oldUnits, state.settings.units), 3);\n });\n });\n }\n },\n\n\n addBoard(state, copyFrom)\n {\n if (copyFrom < 0 || copyFrom >= state.boards.length)\n {\n state.boards.push({\n thickness: 2,\n length: 70,\n layers: []\n });\n\n return;\n }\n\n const source = state.boards[copyFrom];\n\n state.boards.push({\n thickness: source.thickness,\n length: source.length,\n layers: source.layers.map(layer =>\n {\n return {\n wood: layer.wood,\n width: layer.width\n };\n })\n });\n\n updateEndGrain(state.endGrain, state.settings, state.boards);\n },\n\n\n removeBoard(state, index)\n {\n if (index < 0 || index >= state.boards.length)\n return;\n\n state.boards.splice(index, 1);\n\n // Update all references to the boards coming after\n state.endGrain.forEach(layer =>\n {\n if (layer.board == index)\n layer.board = -1;\n else if (layer.board > index)\n layer.board--;\n });\n\n updateEndGrain(state.endGrain, state.settings, state.boards);\n },\n\n\n updateBoard(state, payload)\n {\n if (payload.board < 0 || payload.board >= state.boards.length)\n return;\n\n const board = state.boards[payload.board];\n const oldLength = board.length;\n mergeObject(payload.values, board);\n\n if (oldLength !== board.length)\n updateEndGrain(state.endGrain, state.settings, state.boards);\n },\n\n\n moveEndgrain(state, payload)\n {\n moveArrayItem(state.endGrain, payload.from, payload.to);\n },\n\n\n // TODO some updates, like Wood properties and Layer width, don't go through the store yet. this works,\n // but is kinda defeating the rules of Vuex.\n\n\n load(state, payload)\n {\n const parsedPayload = JSON.parse(payload);\n loadObject(state, parsedPayload);\n },\n\n loadMsgPack(state, payload)\n {\n try\n {\n const parsedPayload = deserialize(payload);\n if (parsedPayload)\n loadObject(state, parsedPayload);\n }\n catch(e)\n {\n console.error(e);\n }\n }\n },\n\n getters: {\n save(state)\n {\n const serialized = serializeState(state, false);\n return JSON.stringify(serialized);\n },\n\n saveMsgPack(state)\n {\n const serialized = serializeState(state, true);\n return serialize(serialized);\n }\n }\n});\n\n\n\n\nfunction moveArrayItem(array, from, to)\n{\n if (from < 0 || from >= array.length)\n return;\n\n if (to < 0 || to > array.length)\n return;\n\n if (to == array.length)\n {\n // Move to end\n array.push(array[from]);\n array.splice(from, 1);\n }\n else\n {\n const item = array[from];\n array.splice(from, 1);\n\n if (to > from)\n to--;\n\n array.splice(to, 0, item);\n }\n}\n\n\nfunction stripsPerBoard(settings, board)\n{\n const stripAndKerf = settings.crosscutWidth + settings.bladeKerf;\n if (stripAndKerf === 0)\n return 0;\n\n let stripsPerBoard = (board.length + settings.bladeKerf) / stripAndKerf;\n\n // Try to account for rounding errors\n stripsPerBoard = units.limitDecimals(stripsPerBoard, 3);\n\n return Math.floor(stripsPerBoard);\n}\n\n\nfunction updateEndGrain(result, settings, boards)\n{\n const boardTally = [];\n for (let i = 0; i < boards.length; i++)\n boardTally[i] = boards[i].length + settings.bladeKerf;\n\n const cutWidth = settings.crosscutWidth + settings.bladeKerf;\n const remove = [];\n\n // Check the current configuration and see if we still have enough\n result.forEach((layer, index) =>\n {\n let boardAvailable = false;\n\n if (layer.board >= 0 && layer.board < boards.length)\n {\n boardAvailable = boardTally[layer.board] >= cutWidth;\n if (boardAvailable)\n boardTally[layer.board] -= cutWidth;\n }\n\n if (!boardAvailable)\n remove.push(index);\n });\n\n for (let i = remove.length - 1; i >= 0; i--)\n result.splice(remove[i], 1);\n\n // If we have sufficient board length left, add the layers for it\n boardTally.forEach((remaining, index) =>\n {\n while (remaining >= cutWidth)\n {\n result.push({ board: index, reversed: false });\n remaining -= cutWidth;\n\n // Try to account for rounding errors\n remaining = units.limitDecimals(remaining, 3);\n }\n });\n}\n\n\n\nfunction mergeObject(source, target)\n{\n for (const property in source)\n {\n if (!source.hasOwnProperty(property) || !target.hasOwnProperty(property))\n continue;\n\n target[property] = source[property];\n }\n}\n\n\nfunction parseFloatDef(value)\n{\n const parsedValue = parseFloat(value);\n return isNaN(parsedValue) ? 0 : parsedValue;\n}\n\n\nfunction parseIntDef(value)\n{\n const parsedValue = parseInt(value);\n return isNaN(parsedValue) ? 0 : parsedValue;\n}\n\n\nfunction loadObject(state, parsedPayload)\n{\n const deserialized = deserializeState(parsedPayload);\n\n mergeObject(deserialized.settings, state.settings);\n state.wood = deserialized.wood;\n state.boards = deserialized.boards;\n state.endGrain = deserialized.endGrain;\n\n updateEndGrain(state.endGrain, state.settings, state.boards);\n}\n\n\n// For the MessagePack version that is used in the URL, we minimize the\n// property names as well to significantly reduce the size. Do not do\n// this for the downloaded versions to make them more readable.\n// Note that this map is also used to convert older MsgPack encoded payloads,\n// as they used the same layout as the JSON data.\nconst SettingsNameMapJSON = {\n settings: {\n self: 'settings',\n units: 'units',\n borders: 'borders',\n bladeKerf: 'bladeKerf',\n crosscutWidth: 'crosscutWidth',\n direction: 'direction'\n },\n\n wood: {\n self: 'wood',\n name: 'name',\n color: 'color'\n },\n\n boards: {\n self: 'boards',\n thickness: 'thickness',\n length: 'length',\n layers: {\n self: 'layers',\n wood: 'wood',\n width: 'width'\n }\n },\n\n endGrain: {\n self: 'endGrain',\n board: 'board',\n reversed: 'reversed'\n }\n};\n\n\nconst SettingsNameMapMsgPack = {\n settings: {\n self: 's',\n units: 'u',\n borders: 'b',\n bladeKerf: 'k',\n crosscutWidth: 'c',\n direction: 'd'\n },\n\n wood: {\n self: 'w',\n name: 'n',\n color: 'c'\n },\n\n boards: {\n self: 'b',\n thickness: 't',\n length: 'x',\n layers: {\n self: 'l',\n wood: 'w',\n width: 'x'\n }\n },\n\n endGrain: {\n self: 'e',\n board: 'b',\n reversed: 'r'\n }\n};\n\n\n\n// All external input and output is done through these functions to provide backwards\n// compatibility and perform sanity checking. This means the rest of the application\n// trust that the contents of the store is as expected.\nfunction serializeState(state, messagePack)\n{\n const map = messagePack ? SettingsNameMapMsgPack : SettingsNameMapJSON;\n const result = {};\n\n result[map.settings.self] = serializeSettings(state.settings, map);\n result[map.wood.self] = serializeWood(state.wood, map);\n result[map.boards.self] = serializeBoards(state.boards, map);\n result[map.endGrain.self] = serializeEndgrain(state.endGrain, map);\n\n return result;\n}\n\n\nfunction serializeSettings(settings, map)\n{\n const result = {};\n\n result[map.settings.units] = settings.units;\n result[map.settings.borders] = settings.borders;\n result[map.settings.bladeKerf] = settings.bladeKerf;\n result[map.settings.crosscutWidth] = settings.crosscutWidth;\n result[map.settings.direction] = settings.direction;\n\n return result;\n}\n\n\nfunction serializeWood(wood, map)\n{\n if (wood.length === 0)\n return [];\n\n return wood.map(item =>\n {\n const result = {};\n\n result[map.wood.name] = item.name;\n result[map.wood.color] = item.color;\n\n return result;\n });\n}\n\n\nfunction serializeBoards(boards, map)\n{\n return boards.map(board =>\n {\n const boardResult = {};\n\n boardResult[map.boards.length] = board.length;\n boardResult[map.boards.thickness] = board.thickness;\n\n boardResult[map.boards.layers.self] = board.layers.map(layer =>\n {\n const layerResult = {};\n\n layerResult[map.boards.layers.wood] = layer.wood;\n layerResult[map.boards.layers.width] = layer.width;\n\n return layerResult;\n });\n\n return boardResult;\n });\n}\n\n\nfunction serializeEndgrain(endGrain, map)\n{\n return endGrain.map(layer =>\n {\n const layerResult = {};\n\n layerResult[map.endGrain.board] = layer.board;\n layerResult[map.endGrain.reversed] = layer.reversed;\n\n return layerResult;\n });\n}\n\n\n\nfunction deserializeState(parsedPayload)\n{\n const map = parsedPayload.hasOwnProperty(SettingsNameMapMsgPack.settings.self) ? SettingsNameMapMsgPack : SettingsNameMapJSON;\n\n const result = {\n settings: deserializeSettings(parsedPayload, map),\n wood: deserializeWood(parsedPayload, map),\n boards: deserializeBoards(parsedPayload, map),\n endGrain: deserializeEndgrain(parsedPayload, map)\n };\n\n\n // Backwards compatibility\n if (parsedPayload.hasOwnProperty('settings'))\n {\n if (parsedPayload.settings.hasOwnProperty('alternateDirection'))\n result.settings.direction = parsedPayload.settings.alternateDirection ? DirectionEnum.alternate : DirectionEnum.uniform;\n\n if (parsedPayload.settings.hasOwnProperty('boardLength'))\n result.boards[0].length = parseFloatDef(parsedPayload.settings.boardLength);\n\n if (parsedPayload.settings.hasOwnProperty('boardThickness'))\n result.boards[0].thickness = parseFloatDef(parsedPayload.settings.boardThickness);\n }\n\n if (result.endGrain.length === 0)\n updateEndGrain(result.endGrain, result.settings, result.boards);\n\n return result;\n}\n\n\nfunction deserializeSettings(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.settings.self))\n return DefaultSettings();\n\n const settings = parsedPayload[map.settings.self];\n\n return {\n units: UnitsEnum.isValid(settings[map.settings.units]) ? settings[map.settings.units] : UnitsEnum.cm,\n borders: settings[map.settings.borders] === true,\n bladeKerf: parseFloatDef(settings[map.settings.bladeKerf]),\n crosscutWidth: parseFloatDef(settings[map.settings.crosscutWidth]),\n direction: DirectionEnum.isValid(settings[map.settings.direction]) ? settings[map.settings.direction] : DirectionEnum.uniform,\n };\n}\n\n\nfunction deserializeWood(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.wood.self) || !Array.isArray(parsedPayload[map.wood.self]))\n return [];\n\n return parsedPayload[map.wood.self].map(item =>\n {\n return {\n name: item[map.wood.name],\n color: /^#[0-9A-F]{6}$/i.test(item[map.wood.color] || '') ? item[map.wood.color] : '#000000'\n };\n });\n}\n\n\nfunction deserializeBoards(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.boards.self) || !Array.isArray(parsedPayload[map.boards.self]))\n return [];\n\n const result = parsedPayload[map.boards.self].map(board =>\n {\n const boardResult = {\n thickness: parseFloatDef(board[map.boards.thickness]),\n length: parseFloatDef(board[map.boards.length]),\n layers: []\n };\n\n if (board.hasOwnProperty(map.boards.layers.self) && Array.isArray(board[map.boards.layers.self]))\n {\n boardResult.layers = board[map.boards.layers.self].map(layer =>\n {\n return {\n wood: parseIntDef(layer[map.boards.layers.wood]),\n width: parseFloatDef(layer[map.boards.layers.width])\n }\n });\n }\n\n return boardResult;\n });\n\n return result.length > 0\n ? result\n : { length: 0, thickness: 0, layers: [] };\n}\n\n\nfunction deserializeEndgrain(parsedPayload, map)\n{\n if (!parsedPayload.hasOwnProperty(map.endGrain.self) || !Array.isArray(parsedPayload[map.endGrain.self]))\n return [];\n\n return parsedPayload[map.endGrain.self].map(layer =>\n {\n return {\n board: parseIntDef(layer[map.endGrain.board]),\n reversed: layer[map.endGrain.reversed] === true\n };\n });\n}","import { createApp } from 'vue';\nimport App from './App.vue';\nimport store from './store';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport { faSlidersH, faLayerGroup, faSave, faPrint, faInfoCircle, faTree } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\n\nlibrary.add(faSlidersH, faLayerGroup, faSave, faPrint, faInfoCircle, faTree);\n\ncreateApp(App)\n .use(store)\n .component('font-awesome-icon', FontAwesomeIcon)\n .mount('#app');\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&id=5bc914fd&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EdgeGrainPreview.vue?vue&type=style&index=0&id=a5fd011a&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Wood.vue?vue&type=style&index=0&id=15338ab0&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./EndGrainPreview.vue?vue&type=style&index=0&id=61e0967d&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./CuttingList.vue?vue&type=style&index=0&id=30665a8d&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Layers.vue?vue&type=style&index=0&id=01187e40&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Settings.vue?vue&type=style&index=0&id=7067c7c7&lang=scss&scoped=true\""],"sourceRoot":""} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 15d619c..e65dd64 100644 --- a/src/App.vue +++ b/src/App.vue @@ -227,6 +227,18 @@ html, body } } +::-webkit-scrollbar +{ + width: 10px; +} + +::-webkit-scrollbar-track { +} + +::-webkit-scrollbar-thumb { + background-color: #606060; +} + #app { font-family: 'Verdana', 'Arial', sans-serif; @@ -300,6 +312,8 @@ button width: 35em; flex-shrink: 0; box-shadow: 0 0 3em #101010; + display: flex; + flex-direction: column; .toolbar { @@ -335,6 +349,11 @@ button } } + .tabs + { + overflow: auto; + } + .tab { padding: 1em; diff --git a/src/components/EndGrainPreview.vue b/src/components/EndGrainPreview.vue index e86c8f5..35b139f 100644 --- a/src/components/EndGrainPreview.vue +++ b/src/components/EndGrainPreview.vue @@ -8,16 +8,18 @@ :width="viewportWidth" :height="viewportHeight" :viewBox="viewBox" - :class="{ dragging: dropTarget !== null }"> + :class="{ dragging: dropTarget !== null, highlightBoard: settings.highlightBoard && volatile.highlightedBoard !== null, highlightLayer: settings.highlightLayer && volatile.highlightedBoard !== null && volatile.highlightedLayer !== null }"> - + + :style="getBoardLayerStyle(board, index)" + class="layer" + :class="{ highlightedLayer: boardIndex === volatile.highlightedBoard && index == volatile.highlightedLayer }" /> @@ -60,6 +62,7 @@ export default { computed: { + volatile() { return this.$store.state.volatile; }, settings() { return this.$store.state.settings; }, boards() { return this.$store.state.boards; }, wood() { return this.$store.state.wood; }, @@ -322,5 +325,22 @@ svg { cursor: grabbing; } + + + &.highlightBoard + { + .boardLayer:not(.highlightedBoard) + { + opacity: 0.5; + } + } + + &.highlightLayer + { + .layer:not(.highlightedLayer) + { + opacity: 0.5; + } + } } \ No newline at end of file diff --git a/src/components/Layers.vue b/src/components/Layers.vue index 6872067..ee4b78f 100644 --- a/src/components/Layers.vue +++ b/src/components/Layers.vue @@ -1,5 +1,5 @@